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

Пропустить код STL при отладке кода С++ в Visual Studio 2012?

Можно ли пропустить код STL при использовании отладчика С++ (native, x64) в Visual Studio 2012? Довольно часто при отладке кода на С++ я перехожу к 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):

enter image description here

Поэтому снова нужно нажать кнопку "Выход", а затем кнопку "Шаг вперед", чтобы войти в функцию foo. Я хочу, чтобы пропустить инициализацию параметров, связанных с STL, или возможность напрямую перейти к функции.

4b9b3361

Ответ 1

Там Step Into Specific доступно в меню правой кнопки мыши:

Step Into Specific

Хотя для одного аргумента я чаще делаю Step Into + Step Out + Step Into с клавиатуры вместо навигации по меню для Step Into Specific.

Неофициальный раздел реестра для того, чтобы всегда переходить на определенный код, описан в сообщении блога MSDN, Как не входить в функции с помощью отладчика Visual С++.

Ответ 2

С Visual Studio, когда вы собираетесь входить в функцию, вы можете щелкнуть правой кнопкой мыши на инструкции и выбрать в каскадном меню под названием " Step Into Specific", которым вы хотите достичь. Затем вы можете обойти копировать конструктор /getter/etc. как аргумент функции. Подробнее см. http://msdn.microsoft.com/en-us/library/7ad07721(v=vs.100).aspx.

Ответ 3

Раньше для этого был раздел реестра, но этот изменился в VS2012:

Visual Studio 2012 (dev11) Все изменилось! Пока команда VС++ не добавит что-то в свой блог (не стесняйтесь их обманывать), загляните в этот файл:

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

Для VS 2013 и 2015, только для моего кода, известного из проектов .NET, был расширен и для работы с родным С++.

Ответ 4

Переместите вызов STL (make_shared) вне foo и передайте результат в foo. Тогда точка останова, установленная при вызове foo, должна находиться за пределами этого кода STL. В противном случае вы не могли бы поставить точку останова внутри самого определения foo?