Подтвердить что ты не робот

Автоматическое пропускание функций STL во время пошаговой отладки в MSVС++ 2010

Часто бывает, что я отлаживаю программу поэтапно. Обычно я всегда использую кнопку "step into" для остановки в каждой строке раздела, в котором я отлаживаю, и когда я думаю, что получил текущую строку, просто нажмите еще раз.

Что действительно нарушает этот поток работы, тем не менее, это вызовы библиотеки. Если что-то похожее на вычисление длины строки или хранилище карты или подобное, отладчик перейдет в некоторый файл STL и продолжит работу там. Затем мне нужно нажать "выскочить", чтобы вернуться в программу, на которую я смотрю.

Это означает: я нарушаюсь из документа, на которого я действительно заинтересован, во-первых, потому что код внезапно исчезает и отображается источник STL, а во-вторых, потому что я должен смотреть на панель кнопок и перемещать мышь, а когда Я отскочил назад, я обычно несколько смущен.

Есть ли способ предотвратить отладчик от открытия исходных файлов STL? Какой-то черный список или, может быть, даже более элегантно, где-то где-то? Я до сих пор нашел параметр "только мой код", но он работает только для управляемого кода, и я работаю с собственным кодом.

4b9b3361

Ответ 1

Хороший вопрос, отладчик, постоянно прыгающий во все, действительно является огромным замедлением и отвлечением во время отладки. К счастью, есть решение:

откройте редактор реестра, перейдите к

HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\NativeDE\StepOver

(добавьте\Wow6432Node после ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, если вы находитесь на 64-битной машине, это в прошлом вызывало у меня головные боли).

Добавьте новое значение строки (REG_SZ). Имя не так важно, я использовал NoSTL для ясности и установил значение

std\:\:.*=NoStepInto

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

Здесь - более подробное объяснение, google on NoStepInto для получения более разбросанной информации.

Ответ 2

Ответ такой, как указано выше, но если вы используете VisualStudio 2017 или он не работает для вас, попробуйте следующее:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Packages\Debugger\Visualizers

Откройте следующий файл с помощью блокнота или что угодно:

default.natjmc

и добавьте эту строку: <Function><Name>std\:\:.*</Name><Action>NoStepInto</Action></Function> "Имя" означает значение ключа реестра в этом файле, а "действие" не требует пояснений.

Если вы также хотите добавить раздел реестра (не уверен, что это необходимо), вы найдете его здесь: \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VSTA\8.0\NativeDE\StepOver По крайней мере, это был путь в моем случае. Понадобилось хорошее время, чтобы найти их, поэтому я надеюсь, что это поможет кому-то. Удалите "Wow6432Node", если у вас есть 32-битная машина, как указано выше.

Ответ 3

Вы не используете F10/F11/Shift + F11??? Это "шаг вперед", "шаг в", "выйти", и есть много полезного. Гораздо удобнее, чем охотиться за кнопками, и вам никогда не придется отвлекаться от исходного кода.

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

Извините, что это не по теме, но ваш первоначальный вопрос был прекрасно ответил предыдущим плакатом, и я подумал, что помогу с чем-то еще:)