在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?
Posted
技术标签:
【中文标题】在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?【英文标题】:Skip STL Code when debugging C++ Code in Visual Studio 2012? 【发布时间】:2013-12-19 14:03:00 【问题描述】:在 Visual Studio 2012 中使用 C++ 调试器(本机,x64)时是否可以跳过 STL 代码?在调试 C++ 代码时,我经常会进入 STL 代码。我希望微软提供的 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):
所以我必须再次按下“退出”按钮而不是再次按下“进入”按钮才能进入foo
功能。我想要的是跳过 STL 相关的参数初始化或直接跳转到函数中的可能性。
【问题讨论】:
附注:假设STL is correct is a bad assumption。更直接的一点是,shift+F11
应该退出,您可以简单地退出 STL 函数,然后进入,直到到达您需要的位置,或者您可以在函数内设置断点。
【参考方案1】:
右键菜单中有Step Into Specific
:
虽然对于单个参数,我更经常使用键盘执行Step Into
+ Step Out
+ Step Into
,而不是在菜单中导航Step Into Specific
。
MSDN 博客文章How to Not Step Into Functions using the Visual C++ Debugger 中描述了用于始终跳过某些代码的非官方注册表项。
【讨论】:
【参考方案2】:使用 Visual Studio,每当您要单步执行某个函数时,实际上都可以右键单击该语句并在名为“Step Into Specific”的级联菜单中选择您想要执行的目标抵达。然后,您可以绕过复制构造函数/getter/等。作为参数传递给函数。请参阅http://msdn.microsoft.com/en-us/library/7ad07721(v=vs.100).aspx 了解更多信息。
【讨论】:
【参考方案3】:对于像 VS2019 这样的新版 Visual Studio,我们新选择了:Just my code
https://docs.microsoft.com/en-us/visualstudio/debugger/just-my-code?view=vs-2019
【讨论】:
【参考方案4】:曾经有一个注册表项可以做到这一点,但是这个has changed in VS2012:
Visual Studio 2012 (dev11) 所有东西都变了!直到 VC++ 团队在他们的博客上放了一些东西(请随意给他们发 bug),看看这个文件:
C:\Program Files[ (x86)]\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\default.natstepfilter
对于 VS 2013 和 2015,Just my code 设置,也来自 .NET 项目,was extended to work for native C++。
【讨论】:
【参考方案5】:将 STL 调用 (make_shared) 移到 foo 之外,并将结果传递给 foo。那么在调用 foo 时设置的断点应该超出该 STL 代码。否则你不能把断点放在 foo 定义本身吗?
【讨论】:
以上是关于在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2012 中调试 .NET Framework 源代码?