在Visual Studio中分步调试时,自动跳过STL函数。

问题描述 投票:18回答:3

在分步调试的过程中,我经常使用 "步入 "来停止在我正在调试的部分的每一行,查看我所有执行的代码。

但是库调用会打乱这个工作流程。调试器会跳到某个STL文件里,然后在那里继续。然后我必须按 "跳出 "键才能回到我自己的代码。

有没有办法防止调试器打开STL源文件?一个黑名单或者某个地方的设置?我是用原生C++代码工作的。不幸的是,"只有我的代码 "的调试器设置只对托管代码有效。

visual-studio visual-studio-2010 debugging
3个回答
12
投票

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

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

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

(如果你用的是64位的机器,就在SOFTWARE后面加上\Wow6432Node,这在过去让我很头疼)。

添加一个新的字符串值(REG_SZ)。名字不是很重要,我用的是 NoSTL 为清晰起见,将其值设为

std\:\:.*=NoStepInto

这告诉调试器不要介入任何与该regex匹配的东西,因此它将跳过std命名空间中的每个函数(全局和类级)。StepInto 你可以为特定的方法添加覆盖,你仍然可以使用断点,当然。添加一些你自己的方法也是很方便的,这些方法经常被介入,但你知道结果。

下面是 是一个更详细的解释,谷歌上 NoStepInto 以获得更多零散的信息。


3
投票

答案如上所述,但万一你使用的是VisualStudio2017,或者没有为你工作,那么可以尝试以下方法。

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

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

default.natjmc

并添加这一行。<Function><Name>std\:\:.*</Name><Action>NoStepInto</Action></Function>"name "是指文件中注册表键值的意思,"action "是不言而喻的。

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


-2
投票

你不会用F10F11Shift+F11吧?那是 "跨过"、"跨入"、"跨出",还有很多有用的。比猎取按钮要好用得多,而且你永远不用把目光从源代码上移开。

一般来说,你在Visual Studio中使用键盘快捷键而不是鼠标是很有好处的。不仅仅是调试,而是所有的事情。学会它们,你会爱上它们的。你可能不可能一下子就学会所有的函数,只要选几个你经常使用的函数,习惯了它们,然后再开始学习不同的一组。久而久之就会成为第二天性。

很抱歉,这是个偏题,但你原来的问题已经被前面的发帖人回答得很漂亮了,我想我可以帮你解决一些别的问题:)

© www.soinside.com 2019 - 2024. All rights reserved.