C++ 有没有一种方法可以自动避免在VisualStudio中执行某些功能?

C++ 有没有一种方法可以自动避免在VisualStudio中执行某些功能?,c++,visual-studio,debugging,C++,Visual Studio,Debugging,我知道“只启用我的代码”调试选项,但这只适用于托管代码 我正在寻找一种无需单步执行函数调用的方法,例如,STL字符串转换运算符,因为在函数的一个参数中存在从char*到字符串的隐式转换。我发现了一种解决方案。虽然我更愿意说“不要介入任何不属于这个项目的事情”,但这看起来是可行的 编辑:在查看了一些博客和新闻组之后,方法是在这个注册表项下为您不想进入的每个函数添加一个条目(假设VS 2005): 32位窗口 \\HKEY\U LOCAL\U MACHINE\Software\Microsoft\V

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

我正在寻找一种无需单步执行函数调用的方法,例如,STL字符串转换运算符,因为在函数的一个参数中存在从char*到字符串的隐式转换。

我发现了一种解决方案。虽然我更愿意说“不要介入任何不属于这个项目的事情”,但这看起来是可行的

编辑:在查看了一些博客和新闻组之后,方法是在这个注册表项下为您不想进入的每个函数添加一个条目(假设VS 2005):

32位窗口 \\HKEY\U LOCAL\U MACHINE\Software\Microsoft\VisualStudio\8.0\NativeDE\Stephover 64位窗口 \\HKEY\U LOCAL\U 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 VisualStudio2005:8.0 VisualStudio2008:9.0 VisualStudio2010:10.0 Visual Studio 2012:11.0 Visual Studio 2013:12.0 此键包含一组影响步进执行方式的规则。每个规则都被指定为一个单独的条目,其名称是一个十进制数,其值是一个函数名模式,用于指定要影响的函数。e、 g

"10" = "boost\:\:scoped_ptr.*\:\:.*=NoStepInto" “10”=“boost\:\:作用域\u ptr.*\:\:*=nospinto” 防止进入boost::作用域的_ptr函数

规则从高到低进行求值,直到找到匹配的模式,或者没有剩余的规则。在这种情况下,该函数将进入

函数名是正则表达式

冒号需要用反斜杠引用

您可以指定单步执行和单步执行。这为您提供了一种避免在同一作用域/命名空间中进入除少数几个函数之外的所有函数的方法

重新启动Visual Studio以获取对注册表的更改。

我的过去副本:

避免介入

避免踩踏通常很有用 转换成一些常见的代码,如 构造函数或重载运算符。 autoexp.dat提供此功能。 添加一个名为 “[执行控制]”。在其中添加关键点 关键是函数名和 值是“鼻塞”。您可以指定 作为通配符的星号(*)作为 命名空间或名称空间的第一组冒号 班级

autoexp.dat仅在Visual Studio上读取 演播室开始了

要忽略函数myfunctionname, 以及对类CFoo的所有调用:

[执行控制]

myfunctionname=NoStepInto

CFoo::*=鼻塞

忽视建设和分配 MFC CStrings:(注意额外的= 在CString::operator=)中

[执行控制]

CString::CString=NoStepInto

CString::operator==NoStepInto

要忽略所有ATL调用,请执行以下操作:

[执行控制]

ATL::*=鼻塞

从这篇()文章

您也可以从菜单中使用“单步执行特定功能”

编辑 抱歉,看起来autoexp.dat在vs 2003/2005中不起作用。 您可以对注册表设置执行相同的操作。

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

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

上下文菜单上还有“单步执行特定”条目,该条目将列出当前行中可以单步执行的函数,您可以选择所需的函数。

<>在C++项目中,可以指定函数以将它们作为非用户代码列出在*.NasTebug筛选器文件中。*.natstepfilter文件中列出的函数不仅仅依赖于我的代码设置

  • 要为所有本地Visual Studio用户指定非用户代码,请将.natstepfilter文件添加到
    %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers
    文件夹中
  • 要为单个用户指定非用户代码,请将.natstepfilter文件添加到
    %USERPROFILE%\My Documents\\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>

功能规范
步进
功能规范
模特
步进
元素 描述 作用 必修的。将一个或多个函数指定为非用户函数。 名称 必修的。ECMA-262格式的正则表达式,指定要匹配的完整函数名。例如:

MyNS::MyClass.


告诉调试器MyNS::MyClass中的所有方法都将被视为非用户代码。匹配区分大小写。 模块 可选。ECMA-262格式的正则表达式,指定包含函数的模块的完整路径。匹配不区分大小写。 行动 必修的。其中一个区分大小写的值:

NoStepInto
-告诉调试器跳过函数。
StepInto
-告诉调试器进入函数,覆盖匹配函数的任何其他NoStepInto。
看起来只有Visual Studio 6才支持AUTOEXP.DAT文件。较新版本使用注册表项。尽管上面的详细信息中列出了Visual Studio 2012、2013,但不再使用注册表。有关如何更新default.natstepfilter的详细信息,请访问博客条目链接。我认为在VS 2012和2013中,当您启用“编辑”和“更改”时,会使用注册表
<?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>