在Visual Studio中逐步调试时自动跳过STL函数

20

在逐步调试过程中,我经常使用“逐步进入”来停在我正在调试的部分的每一行代码上,以查看所有被执行的代码。

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

有没有办法防止调试器打开STL源文件? 是否有黑名单或设置?我是使用原生C++代码。不幸的是,“只有我的代码”调试器设置仅适用于托管代码。


3个回答

12

好问题,调试器不断跳进所有东西确实会在调试期间产生巨大的减速和干扰。幸运的是,有一个解决方案:

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

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

如果您使用的是64位机器,在SOFTWARE后面添加\Wow6432Node,这在过去曾经让我头疼过。

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

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

这里提供了更详细的解释,请在Google上搜索NoStepInto以获取更分散的信息。


3
答案如上所述,但如果您使用VisualStudio 2017或它对您不起作用,则尝试以下操作:
C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ Packages \ Debugger \ Visualizers
使用记事本或任何您拥有的东西打开以下文件:
default.natjmc
并添加此行: std\:\:.*NoStepInto “名称”表示该文件中注册表键的值,“操作”是不言自明的。
如果您还想添加注册表键(不确定是否必要),则可以在此处找到它: \ 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> - CorpseDead
2
对于Visual Studio 2019,您必须编辑C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Packages\Debugger\Visualizers\default.natstepfilter。更改会立即应用,无需重新启动IDE。 - Pascal T.
如何在Visual Studio 2015中完成相同的操作? - Molochnik
我没有安装VS2015,但我认为我所写的或被接受的答案类似的东西应该也适用于它。毕竟,所有这些模式似乎都是相似的。 - CorpseDead

-3
你不用 F10/F11/Shift+F11 吗?这些是“跳过”,“步入”,“步出”,还有很多其他有用的快捷键。比寻找按钮更加实用,而且你永远不必把目光从源代码上移开。
一般来说,在 Visual Studio 中使用键盘快捷键而不是鼠标会更好。不仅仅是在调试时,而是所有操作都可以。学习它们,你会喜欢它们!你可能无法一次性学会所有快捷键,只需选择几个常用的功能,熟悉它们,然后再开始另一组。随着时间的推移,这将变得自然而然。
很抱歉这与主题无关,但是前面的回答已经非常完美了,我想帮助你解决其他问题 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接