在Visual Studio 2012中使用C ++调试器(native,x64)时是否可以跳过STL代码?通常在调试C ++代码时我会进入STL代码。我希望Microsoft提供的STL代码是正确的 - 我对调试它不感兴趣 - 我只对调试我自己的(自编)代码感兴趣。
对于在此功能设置断点时的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相关的参数初始化或直接跳转到函数的可能性。
答案 0 :(得分:8)
右键单击菜单上有Step Into Specific
:
虽然只有一个参数,我会更频繁地从键盘上Step Into
+ Step Out
+ Step Into
而不是导航Step Into Specific
的菜单。
MSDN博客文章How to Not Step Into Functions using the Visual C++ Debugger中描述了一个非常规的注册表项,用于始终单步执行某些代码。
答案 1 :(得分:4)
使用Visual Studio,无论何时进入某个功能,您都可以右键单击该语句,然后在名为“单步进入特定”的级联菜单中选择您想要的目标达到。然后,您可以绕过复制构造函数/ getter / etc.作为参数传递给函数。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/7ad07721(v=vs.100).aspx。
答案 2 :(得分:2)
对于像VS2019这样的Visual Studio新版本,我们选择了新的内容:只需我的代码
https://docs.microsoft.com/en-us/visualstudio/debugger/just-my-code?view=vs-2019
答案 3 :(得分:1)
曾经有一个注册表项来执行此操作,但是has changed in VS2012:
Visual Studio 2012(dev11) 一切都改变了!在VC ++团队在他们的博客上放置一些内容之前(请随意让他们这样做),请看一下这个文件:
C:\Program Files[ (x86)]\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\default.natstepfilter
对于VS 2013和2015,仅我的代码设置,从.NET项目was extended to work for native C++中获知。
答案 4 :(得分:-1)
将STL调用(make_shared)移到foo之外,并将结果传递给foo。然后在对foo的调用上设置的断点应该超出该STL代码。否则你不能把断点放在foo定义本身里面吗?