在 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&lt;int&gt;(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 源代码?

Visual Studio 2012 中的远程调试

Visual Studio 2012 分析远程调试过程

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

visual studio 2012如何调试和运行程序?

在 Visual Studio 2012 Express 中设置 C++ 调试环境