Fer*_*cio 28 c++ debugging visual-studio
我知道"只启用我的代码"调试选项,但这只适用于托管代码.
我正在寻找一种方法来进入函数调用,而不必单步执行,例如,STL字符串强制转换操作符,因为在函数的一个参数中存在从char*到字符串的隐式转换.
Fer*_*cio 19
我发现这个博客条目有一个解决方案.虽然我更愿意说"不要介入任何不属于这个项目的东西",但这看起来还是可行的.
编辑:看了几个博客和新闻组后,方法是为每个你不想在这个注册表项下进入的函数添加一个条目(假设VS 2005):
32 bit Windows
\\HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\NativeDE\StepOver
64 bit Windows
\\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\8.0\NativeDE\StepOver
路径的版本号:
Visual Studio 2005: 8.0 Visual Studio 2008: 9.0 Visual Studio 2010: 10.0 Visual Studio 2012: 11.0 Visual Studio 2013: 12.0
此键包含一组影响步进执行的规则.每个规则都被指定为一个单独的条目,其名称是十进制数,其值是一个函数名称模式,用于指定我们想要影响的函数.例如
"10" = "boost\:\:scoped_ptr.*\:\:.*=NoStepInto"
阻止步入boost :: scoped_ptr函数.
从高值到低值评估规则,直到找到匹配的模式,或者没有剩下的规则.在这种情况下,该功能进入.
函数名称是正则表达式.
冒号需要用反斜杠引用.
您可以指定StepInto以及NoStepInto.这为您提供了一种避免步入同一范围/命名空间中的所有功能的方法.
重新启动Visual Studio以获取对注册表的更改.
在 C++ 项目中,您可以通过将函数列为 *.natstepfilter 文件中的非用户代码来指定要跳过的函数。*.natstepfilter 文件中列出的函数不依赖于 Just My Code 设置。
%VsInstallDirectory%\Common7\Packages\Debugger\Visualizers夹中。%USERPROFILE%\My Documents\<Visual Studio version>\Visualizers夹中。.natstepfilter 文件是具有以下语法的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
<Function>
<Name>FunctionSpec</Name>
<Action>StepAction</Action>
</Function>
<Function>
<Name>FunctionSpec</Name>
<Module>ModuleSpec</Module>
<Action>StepAction</Action>
</Function>
</StepFilter>
Run Code Online (Sandbox Code Playgroud)
| 元素 | 描述 |
|---|---|
| 功能 | 必需的。将一个或多个函数指定为非用户函数。 |
| 姓名 | 必需的。指定要匹配的完整函数名称的 ECMA-262 格式的正则表达式。例如:<Name>MyNS::MyClass.*</Name>告诉调试器 MyNS::MyClass 中的所有方法都将被视为非用户代码。匹配区分大小写。 |
| 模块 | 可选的。一个 ECMA-262 格式的正则表达式,指定包含函数的模块的完整路径。匹配不区分大小写。 |
| 行动 | 必需的。这些区分大小写的值之一:NoStepInto- 告诉调试器单步执行该函数。StepInto- 告诉调试器单步执行函数,覆盖匹配函数的任何其他 NoStepInto。 |