Есть ли способ автоматически избежать вмешательства в определенные функции в Visual Studio? - PullRequest
28 голосов
/ 09 марта 2009

Мне известна опция отладки «Включить только мой код», но она работает только для управляемого кода.

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

Ответы [ 5 ]

19 голосов
/ 09 марта 2009

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

РЕДАКТИРОВАТЬ: После просмотра нескольких блогов и групп новостей, метод состоит в том, чтобы добавить запись для каждой функции, в которую вы не хотите входить в этот раздел реестра (при условии VS 2005):

<b>32 bit Windows</b>
    \\HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\NativeDE\StepOver
<b>64 bit Windows</b>
    \\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, чтобы получить изменения в реестре.

4 голосов
/ 14 сентября 2015

В Visual Studio 2012 посмотрите на следующий файл:

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

4 голосов
/ 09 марта 2009

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

4 голосов
/ 09 марта 2009

Мое прошлое:

Избегая наступления на вещи

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

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

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

[ExecutionControl]

myfunctionname = NoStepInto

CFoo :: * = NoStepInto

игнорировать конструкцию и назначение строк MFC CS: (обратите внимание на дополнительные = в CString :: operator =.)

[ExecutionControl]

CString :: CString = NoStepInto

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

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

[ExecutionControl]

ATL :: * = NoStepInto

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

Также вы можете использовать «Step Into Specific Function» из меню pupup.

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

2 голосов
/ 09 марта 2009

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 для поиска.

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

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