【问题标题】:Auto-skip STL functions during step-by-step debugging in Visual Studio在 Visual Studio 中逐步调试期间自动跳过 STL 函数
【发布时间】:2011-07-17 02:31:59
【问题描述】:

在逐步调试过程中,我经常使用“step into”在我正在调试的部分中的每一行处暂停,以查看我所有已执行的代码。

但库调用可能会中断此工作流程:调试器将跳转到某个 STL 文件并继续在那里。然后我必须按“跳出”返回我自己的代码。

有没有办法阻止调试器打开 STL 源文件?黑名单还是某个地方的设置?我使用本机 C++ 代码。不幸的是,“仅我的代码”调试器设置仅适用于托管代码。

【问题讨论】:

标签: visual-studio visual-studio-2010 debugging


【解决方案1】:

好问题,调试器不断跳入所有内容确实是调试过程中的巨大减速和分心。幸运的是有一个解决方案:

打开您的注册表编辑器,导航到

HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\NativeDE\StepOver

(如果您使用的是 64 位机器,请在 SOFTWARE 后添加 \Wow6432Node,这让我过去很头疼)。

添加一个新的字符串值 (REG_SZ)。名称不是那么重要,为了清楚起见,我使用了 NoSTL 并将其值设置为

std\:\:.*=NoStepInto

这告诉调试器不要进入与该正则表达式匹配的任何内容,因此它将跳过 std 命名空间中的每个函数(全局和类级别)。 通过使用StepInto,您可以为特定方法添加覆盖,并且您仍然可以使用断点。添加一些您自己的方法也很方便,这些方法经常进入,但您可以一目了然地知道结果。

Here 是更详细的解释,google on NoStepInto 获取更多零散信息。

【讨论】:

    【解决方案2】:

    答案如上所述,但如果您使用 VisualStudio 2017 或它对您不起作用,请尝试以下操作:

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Packages\Debugger\Visualizers

    用记事本或任何你有的东西打开以下文件:

    default.natjmc

    并添加这一行: <Function><Name>std\:\:.*</Name><Action>NoStepInto</Action></Function> “名称”表示该文件中注册表项的值,“操作”是不言自明的。

    如果你也想添加注册表项,(不确定是否有必要),那么你会在这里找到它: \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VSTA\8.0\NativeDE\StepOver 至少,这就是我的路径。花了一个小时才找到这些,所以我希望它会对某人有所帮助。 如上所述,如果您有 32 位机器,请删除“Wow6432Node”。

    【讨论】:

    • 我在重新安装我的电脑时再次这样做了。该位置仍然是 Package\Visualisation 文件夹。我不需要注册表项。但是这次我不得不在default.natstepfilter 文件中添加这一行,而不是default.natjmc 文件。简单地说,将它添加到与我上面发布的行具有相同格式的文件中。为澄清起见,此格式:<Function><Name>std\:\:.*</Name><Action>NoStepInto</Action></Function>
    • 对于 Visual Studio 2019,您必须编辑 C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Packages\Debugger\Visualizers\default.natstepfilter 。更改会立即应用,无需重新启动 IDE。
    • 在 Visual Studio 2015 中如何做到这一点?
    • 我没有安装 VS2015,但我认为类似于我写的内容或接受的答案应该适用。毕竟,他们所有人的模式似乎都相似。
    【解决方案3】:

    你不用F10/F11/Shift+F11???这些是“越过”、“进入”、“走出”,还有更多有用的。比寻找按钮更有用,而且您永远不必将目光从源代码上移开。

    一般来说,在 Visual Studio 中使用键盘快捷键而不是鼠标会很好地为您服务。不仅仅是为了调试,而是为了一切。学习他们,你会爱上他们的!您可能无法一次全部学习它们,只需选择一些您经常使用的功能,习惯它们,然后从不同的集合开始。随着时间的推移,它会成为第二天性。

    对不起,这是题外话,但你原来的问题已经被之前的海报很好地回答了,我想我会帮忙做点别的:)

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2021-11-18
      • 2016-02-06
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多