Пропустить код 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, или возможность напрямую перейти к функции.
Ответы
Ответ 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?