我知道“只启用我的代码”调试选项,但这只适用于托管代码。
我正在寻找一种方法来进入函数调用,而不必单步执行,例如,STL字符串强制转换操作符,因为在函数的一个参数中存在从char *到字符串的隐式转换。
答案 0 :(得分:19)
我发现这个blog entry有一个解决方案。虽然我更愿意说“不要介入任何不属于这个项目的东西”,但这看起来还是可行的。
编辑:在查看了一些博客和新闻组之后,该方法是为您不想在此注册表项下进入的每个函数添加一个条目(假设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
此键包含一组影响步进执行的规则。每个规则都被指定为一个单独的条目,其名称是十进制数,其值是一个函数名称模式,用于指定我们想要影响的函数。 e.g。
"10" = "boost\:\:scoped_ptr.*\:\:.*=NoStepInto"
阻止步入boost :: scoped_ptr函数。
从高值到低值评估规则,直到找到匹配的模式,或者没有剩下的规则。在这种情况下,该功能将进入。
函数名称是正则表达式。
需要用反斜杠引用冒号。
您可以指定StepInto以及NoStepInto。这为您提供了一种避免单步执行同一范围/命名空间中的所有函数的方法。
重新启动Visual Studio以获取对注册表的更改。
答案 1 :(得分:4)
我的副本过去:
避免步入事物
避免踩踏通常很有用 进入一些常见的代码 构造函数或重载运算符。 autoexp.dat提供此功能。 添加一个名为的部分 “[ExecutionControl]”。在哪里添加键 关键是功能名称和 值是“NoStepInto”。你可以指定 星号(*)作为通配符 命名空间的第一组冒号或 类。
autoexp.dat仅在Visual上读取 工作室的启动。
要忽略myfunctionname函数, 以及对CFoo类的所有调用:
[ExecutionControl]
myfunctionname = NoStepInto
Cfoo的:: * = NoStepInto
忽略构造和分配 MFC CStrings :(注意额外= 在CString :: operator =。)
[ExecutionControl]
CString的:: CString的= NoStepInto
CString的::运算符== NoStepInto
忽略所有ATL呼叫:
[ExecutionControl]
ATL :: * = NoStepInto
来自这篇(http://www.highprogrammer.com/alan/windev/visualstudio.html)文章。
您也可以从pupup菜单中使用“Step Into Specific Function”。
修改强> 抱歉,看起来autoexp.dat在vs 2003/2005中不起作用。 您可以使用注册表设置执行相同的操作。 http://groups.google.com/group/microsoft.public.vsnet.debugging/browse_thread/thread/b03dee5a626470c0/26addb1b539883e8
答案 2 :(得分:4)
在上下文菜单中还有“特定步骤”条目,它将列出可以在当前行上进入的功能,您可以选择所需的功能。
答案 3 :(得分:4)
从Visual Studio 2012中,查看以下文件:
C:\Program Files[ (x86)]\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\default.natstepfilter
答案 4 :(得分:2)
VS6曾经允许你在autoexp文件中定义值,让你跳过步入公共函数(例如字符串构造函数)。从VS7开始,这些排除项被移至注册表。易用性受到严重打击。
在VS7及更高版本中,微软以他们的智慧将这些排除项移至注册表中。以下是一些例子:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\NativeDE\StepOver]
"10"="CString\\:\\:CString=NoStepInto"
"11"=".*\\.c_str.*=NoStepInto"
键名代表搜索顺序。 键值包含要搜索的VS正则表达式。
如果您创建自己的排除项,请务必从反汇编视图中获取该名称。源中的声明可能与编译器生成的名称不匹配,尤其是模板化函数。