Блок отладчик для перехода в функции - PullRequest
6 голосов
/ 13 июня 2011

Я ищу способ заблокировать отладчик Visual Studio для перехода к определенным классам и функциям при нажатии клавиши F11. Или заблокируйте некоторые файлы, чтобы среда IDE не открывала их, просто пошагово (кроме случаев, когда есть исключение).

Я знаю, это звучит глупо, но я использую умные указатели и другие вспомогательные классы, многие перегруженные операторы, простые выражения состоят из множества вызовов функций, которые исчезают при оптимизации, поэтому это не проблема скорости, а это проблема отладки, все время открывающая и закрывающая столько файлов, проходящая через множество функций, случайно оставляющая целевой код и т. д.

Вот пример того, о чем я говорю:

stepToThisFunction(objectOfIgnoreClass->ignoreFunction());

Когда отладчик находится в этой строке, нажатие клавиши F11 должно вводить только stepToThisFunction, проходя через ignoreFunction() или, возможно, любой вызов функции из objectOfIgnoreClass.

Какой-то нативный эквивалент управляемого DebuggerStepThrough. Я не хочу использовать CLI. Просто ключевое слово или макрос, написанный перед функцией / классом. Я также нашел кое-что, некоторые изменения в ключе реестра, но это, кажется, не то, что я ищу, или я не понимаю его механизм (я даже не понимаю, какие ключи реестра имеют к этому отношение) , Кроме того, «поставить точку останова» и «запустить до курсора» не являются приемлемым решением.

Ответы [ 3 ]

6 голосов
/ 13 июня 2011

У меня есть макрос, чтобы сделать именно это.Это не очень быстро, но очень полезно (на самом деле я также преобразовал его в C #, чтобы я мог использовать его в AddIn, что намного быстрее).Просто настройте регулярное выражение с помощью функций, которые вы хотите игнорировать, и привяжите их к F11 или другому выбранному вами ключу:

 Sub StepIntoNextRealFunction()
    DTE.Debugger.StepInto(True)
    Dim frame As EnvDTE.StackFrame = DTE.Debugger.CurrentStackFrame
    Dim fn As String = frame.FunctionName
    Dim skipRE As Regex = New Regex("operator.*->|MyString::MyString|operator new|operator.*\*|ignoreFunction")
    If (skipRE.Match(fn).Success) Then

        DTE.Debugger.StepOut(True)
        DTE.Debugger.StepInto(True)
    End If
End Sub

Правка: вот версия C # - вам нужно создать надстройку, а затем подключитьк объекту ООД:

  public void StepIntoNextRealFunction(DTE2 dte)
    {
        Debugger2 debugger=(Debugger2)dte.Debugger;
        debugger.StepInto(true);
        while (true) {
            EnvDTE.StackFrame frame = debugger.CurrentStackFrame;
            string fn = frame.FunctionName;
            Regex skipRE = new Regex("operator.*->|basic_string.*basic_string");

            if ((skipRE.Match(fn).Success)) {
                debugger.StepOut(true);
                debugger.StepInto(true);
            } else {
                break;
            }
        }
    }
3 голосов
/ 19 сентября 2011

В Visual Studio есть неподдерживаемая функция, которая позволяет постоянно настраивать отладчик, чтобы не выполнять определенные функции. Подробности приведены в этом сообщении в блоге MSDN:

http://blogs.msdn.com/b/andypennell/archive/2004/02/06/69004.aspx

3 голосов
/ 13 июня 2011

Щелкните правой кнопкой мыши по строке и выберите «Шаг в определенное». Затем выберите нужную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...