Есть ли способ автоматически избежать перехода на определенные функции в Visual Studio?

Я знаю параметр отладки "Включить только мой код", но это работает только для управляемого кода.

Я ищу способ войти в вызов функции, не переходя через, например, оператор String string, потому что существует неявное преобразование из char * в строку в одной из функций параметры.

Ответ 1

Я нашел эту запись в которой есть решение. Хотя я бы предпочел сказать "не вступать во все, что не входит в этот проект" , это выглядит выполнимым.

EDIT: после просмотра нескольких блогов и групп новостей, метод состоит в том, чтобы добавить запись для каждой функции, в которую вы не хотите входить в этот раздел реестра (при условии VS 2005):

32 bit Windows
    \\HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\NativeDE\StepOver
64 bit Windows
    \\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\8.0\NativeDE\StepOver

Номера версий для пути:

Visual Studio 2005: 8.0
Visual Studio 2008: 9.0
Visual Studio 2010: 10.0
Visual Studio 2012: 11.0
Visual Studio 2013: 12.0

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

    "10" = "boost\:\:scoped_ptr.*\:\:.*=NoStepInto"

предотвращает переход в функции boost:: scoped_ptr.

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

Названия функций - это регулярные выражения.

Колонки должны быть процитированы с обратной косой чертой.

Вы можете указать StepInto, а также NoStepInto. Это дает вам возможность избежать доступа ко всем, кроме нескольких функций в том же пространстве/пространстве имен.

Перезапустите Visual Studio, чтобы получить изменения в реестре.

Ответ 2

Моя копия:

Избегайте шага в вещи

Часто полезно избегать степпинга в какой-то общий код, например конструкторы или перегруженные операторы. autoexp.dat предоставляет эту возможность. Добавьте раздел, называемый "[ExecutionControl]". Добавить ключи, где ключ - это имя функции и Значение "NoStepInto". Вы можете указать звездочкой (*) в качестве подстановочного знака, как первый набор двоеточий для пространства имен или класс.

autoexp.dat читается только на Visual Студия запуска.

Чтобы игнорировать функцию myfunctionname, и все вызовы класса CFoo:

[ExecutionControl]

myfunctionname = NoStepInto

CFoo:: * = NoStepInto

Чтобы игнорировать конструкцию и назначение MFC CStrings: (Обратите внимание, что extra = в CString:: operator =.)

[ExecutionControl]

CString:: CString = NoStepInto

CString:: оператор == NoStepInto

Чтобы игнорировать все вызовы ATL:

[ExecutionControl]

ATL:: * = NoStepInto

из этой статьи (http://www.highprogrammer.com/alan/windev/visualstudio.html).

Также вы можете использовать "Step Into Specific Function" из кукольного меню.

Edit Извините, похоже, что autoexp.dat не работает в версии 2003/2005. То же самое можно сделать с настройками реестра. http://groups.google.com/group/microsoft.public.vsnet.debugging/browse_thread/thread/b03dee5a626470c0/26addb1b539883e8

Ответ 3

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

Ответ 4

Из Visual Studio 2012 ознакомьтесь со следующим файлом:

C:\Program Files[ (x86)]\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\default.natstepfilter

Ответ 5

VS6 используется, чтобы вы могли определять значения в файле autoexp, позволяя вам пропускать шаги в общие функции (например, конструкторы строк). Начиная с VS7 эти исключения были перенесены в реестр. Простота использования серьезно пострадала.

В VS7 и выше Microsoft в своей мудрости переместила эти исключения в реестр. Вот несколько примеров:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\NativeDE\StepOver]
"10"="CString\\:\\:CString=NoStepInto"
"11"=".*\\.c_str.*=NoStepInto"

Названия клавиш представляют собой порядок поиска. Значения ключа содержат VS регулярные выражения для поиска.

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