【问题标题】:Customize Visual Studio debugger to skip constructors自定义 Visual Studio 调试器以跳过构造函数
【发布时间】:2021-11-18 02:38:14
【问题描述】:

我知道在调试时可以使用 .natvis 文件自定义对象在 Visual Studio 中的显示方式。

有没有办法修改调试器的行为以单步执行某些成员函数而不是单步执行它们?

例如:

class pt{
    double x, y;
    pt::pt(double x, double y) : x(x), y(y){}  // <--- I don't want to step into this stuff in debugger
}

void some_function(pt const &point){
    // stuff that I want to step through in the debugger
}

int main(){

    // this will call the constructor for pt.  I want to step into 'some_function'
    // but I don't want to step into the pt constructor
    some_function({1, 2});  // I would like to step into this function without stepping into pt::pt first

    return 0;
}

当我进入对 some_function 的调用时,有没有办法使用 natvis 文件来指定我不想进入示例中像“pt”这样的类的构造函数?

(我知道可以执行具体步骤,但我不想在这种情况下这样做。)

【问题讨论】:

    标签: visual-studio debugging visual-studio-debugging


    【解决方案1】:

    这是可能的,但灵活性不如natvis 文件。

    指定调试器“跳过”的函数由via the natstepfilter file 处理。在链接页面上查找自定义 C++ 步进行为独立于仅我的代码设置部分:

    • 要为所有本地 Visual Studio 用户指定非用户代码,请将 .natstepfilter 文件添加到%VsInstallDirectory%\Common7\Packages\Debugger\Visualizers 文件夹。

    • 要为单个用户指定非用户代码,请将 .natstepfilter 文件添加到 %USERPROFILE%\My Documents\&lt;Visual Studio version&gt;\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>
    

    目前这只能通过全局 Visual Studio 配置来完成,并且与 natvis 不同,它不能作为项目的一部分包含在内。

    已经有an open issue in the Visual Studio bugtracker requesting support for per-project natstepfilter files

    【讨论】:

    • 我确信这是答案,但我也确信我无法让它工作。你知道VS何时解析文件吗? (我必须关闭 VS 才能看到更改,还是只需要重新开始调试会话?)
    • 当我找出正确的文件位置(我有许多旧 VS 安装的残余)时,我正在让它工作。我仍在为某些事情所需的确切语法而苦苦挣扎,但它正在做我想做的事情。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2014-02-21
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多