【问题标题】:Skip STL Code when debugging C++ Code in Visual Studio 2012?在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?
【发布时间】: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 函数,然后进入,直到到达您需要的位置,或者您可以在函数内设置断点。

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


【解决方案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 定义本身吗?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-05-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2013-02-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多