有没有办法自动避免步入Visual Studio中的某些功能?

时间:2009-03-09 15:39:22

标签: c++ visual-studio debugging

我知道“只启用我的代码”调试选项,但这只适用于托管代码。

我正在寻找一种方法来进入函数调用,而不必单步执行,例如,STL字符串强制转换操作符,因为在函数的一个参数中存在从char *到字符串的隐式转换。

5 个答案:

答案 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正则表达式。

如果您创建自己的排除项,请务必从反汇编视图中获取该名称。源中的声明可能与编译器生成的名称不匹配,尤其是模板化函数。