Пропустить код STL при отладке кода C++ в Visual Studio 2012?
Можно ли пропустить STL-код при использовании отладчика C++ (native, x64) в Visual Studio 2012? Довольно часто при отладке кода C++ я вхожу в код STL. Я ожидаю, что код STL, предоставленный Microsoft, является правильным - я не заинтересован в его отладке - меня интересует только отладка моего собственного (написанного самостоятельно) кода.
Для instacne при установке точки останова на эту функцию:
foo(std::make_shared<int>(6));
где foo определяется как:
void foo(std::shared_ptr<int> x)
{
// do something
}
Я не хочу вдаваться в детали std::make_shared - я хочу перейти непосредственно к функции foo. Но это кажется невозможным. Если точка останова на foo(std::make_shared<int>(6));
достигается, и я нажимаю кнопку "Step Into" (или F11), она сначала входит в файл заголовка "memory" (STL):
Итак, снова я должен нажать кнопку "Step Out", а затем снова кнопку "Step Into", чтобы войти в foo
функция. Я хочу пропустить инициализацию параметров, связанных с STL, или возможность перейти непосредственно в функцию.
4 ответа
Там в Step Into Specific
доступно в контекстном меню:
Хотя для одного аргумента я буду чаще делать Step Into
+ Step Out
+ Step Into
с клавиатуры вместо навигации по меню для Step Into Specific
,
Неофициальный ключ реестра для того, чтобы всегда перешагивать через определенный код, описан в сообщении блога MSDN, Как не вмешиваться в функции с помощью отладчика Visual C++.
В Visual Studio каждый раз, когда вы собираетесь войти в функцию, вы можете щелкнуть правой кнопкой мыши на операторе и выбрать в каскадном меню "Step Into Specific" пункт назначения, которого хотите достичь. Затем вы можете обойти конструктор копирования / получатель / и т.д. передан в качестве аргумента функции. См. http://msdn.microsoft.com/en-us/library/7ad07721(v=vs.100).aspx для получения дополнительной информации.
Для новой версии Visual Studio, такой как VS2019, мы выбрали новый вариант: Только мой код
https://docs.microsoft.com/en-us/visualstudio/debugger/just-my-code?view=vs-2019
Раньше для этого был раздел реестра, но в VS2012 это изменилось:
Visual Studio 2012 (dev11) Все изменилось! Пока команда VC++ не разместит что-то в своем блоге (не стесняйтесь делать им ошибки), взгляните на этот файл:
C:\Program Files[ (x86)]\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\default.natstepfilter
Для VS 2013 и 2015 настройка Just my code, известная из проектов.NET, была расширена для работы и для собственного C++.
Переместите вызов STL (make_shared) за пределы foo и передайте результат в foo. Тогда точка останова, установленная для вызова foo, должна быть за пределами этого кода STL. Иначе не могли бы вы поставить точку останова внутри самого определения foo?