Пропустить код 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?

Другие вопросы по тегам