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