【问题标题】:Block debugger to step into functions块调试器单步执行功能
【发布时间】:2011-06-13 12:06:25
【问题描述】:

我正在寻找一种方法来阻止 Visual Studio 调试器在按 F11 时单步执行某些类和函数。或者阻止一些文件,这样 IDE 就不会打开它们,只是一步步走(除非有异常)。

我知道这听起来有点愚蠢,但我使用智能指针和其他辅助类,许多重载运算符,简单表达式由许多函数调用组成,在优化时消失,所以这不是速度问题,而是是调试问题,一直打开和关闭那么多文件,经历了很多功能,不小心离开了目标代码等等。

这是我正在谈论的一个例子:

stepToThisFunction(objectOfIgnoreClass->ignoreFunction());

当调试器在这一行时,按 F11 应该只输入 stepToThisFunction,单步执行 ignoreFunction() 或可能来自 objectOfIgnoreClass 的任何函数调用。

托管DebuggerStepThrough 的一些本机等效项。我不想使用 CLI。只是在函数/类之前编写的关键字或宏。我还发现了一些东西,一些注册表项修改,但这似乎不是我正在寻找的东西,或者我不明白它的机制(我什至不明白注册表项与此有什么关系) .此外,不接受“放置断点”和“运行到光标”的解决方案。

【问题讨论】:

    标签: c++ visual-studio visual-studio-2010 debugging visual-c++


    【解决方案1】:

    我有一个宏可以精确地做到这一点。它不是很快,但非常有用(实际上我也将它转换为 C#,所以我可以在 AddIn 中使用它,这要快得多)。只需使用您要忽略的功能自定义正则表达式并绑定到 F11 或您选择的其他键:

     Sub StepIntoNextRealFunction()
        DTE.Debugger.StepInto(True)
        Dim frame As EnvDTE.StackFrame = DTE.Debugger.CurrentStackFrame
        Dim fn As String = frame.FunctionName
        Dim skipRE As Regex = New Regex("operator.*->|MyString::MyString|operator new|operator.*\*|ignoreFunction")
        If (skipRE.Match(fn).Success) Then
    
            DTE.Debugger.StepOut(True)
            DTE.Debugger.StepInto(True)
        End If
    End Sub
    

    编辑:这是一个 C# 版本 - 您需要创建一个插件,然后连接到 DTE 对象:

      public void StepIntoNextRealFunction(DTE2 dte)
        {
            Debugger2 debugger=(Debugger2)dte.Debugger;
            debugger.StepInto(true);
            while (true) {
                EnvDTE.StackFrame frame = debugger.CurrentStackFrame;
                string fn = frame.FunctionName;
                Regex skipRE = new Regex("operator.*->|basic_string.*basic_string");
    
                if ((skipRE.Match(fn).Success)) {
                    debugger.StepOut(true);
                    debugger.StepInto(true);
                } else {
                    break;
                }
            }
        }
    

    【讨论】:

    • @SinistraD:打开宏资源管理器,如果您还没有创建一个新模块,请创建一个新模块并将函数粘贴到那里,然后在工具 -> 选项 -> 键盘中,您可以映射键盘快捷键.看看提供的一些示例宏——那里有一些非常有用的东西。
    • 同时在 MSDN 中找到它(删除了我的评论,没有看到你的回复)。我必须将它重写为 C#,因为我没有安装 VB.NET。您是否有 C# 版本(正如您在帖子中提到的,或者您想说的是 .NET)?如果没有问题。我会说 C#,所以我想我会管理。
    • 我有一个 C# 版本 -- 添加在上面
    【解决方案2】:

    右键单击该行并选择“Step into specific”。然后选择你想要的功能。

    【讨论】:

    • 这个确实有效,但是不直观,每次都得这么做,没有更永久的解决方案吗?比如宏什么的
    【解决方案3】:

    Visual Studio 中有一项不受支持的功能,可让您永久配置调试器以不单步执行某些功能。此 MSDN 博客文章中给出了详细信息:

    http://blogs.msdn.com/b/andypennell/archive/2004/02/06/69004.aspx

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 2012-06-21
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多