在Visual Studio 2012中调试C ++代码时跳过STL代码?

时间:2013-12-03 13:24:19

标签: c++ visual-studio-2012 stl visual-studio-debugging

在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):

enter image description here

所以我再次按下'Step Out'按钮而不是再按'Step Into'按钮进入foo功能。我想要的是跳过STL相关的参数初始化或直接跳转到函数的可能性。

5 个答案:

答案 0 :(得分:8)

右键单击菜单上有Step Into Specific

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定义本身里面吗?