阻止调试器进入函数

Block debugger to step into functions

本文关键字:函数 调试器      更新时间:2023-10-16

我正在寻找一种方法来阻止Visual Studio调试器在按F11时进入某些类和函数。或者阻止一些文件,这样IDE就不会打开它们,只需逐步通过(除非出现异常)

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

这里有一个例子,我说的是:

stepToThisFunction(objectOfIgnoreClass->ignoreFunction());

当调试器在此行上时,按F11应只输入stepToThisFunction,逐步执行ignoreFunction()或可能从objectOfIgnoreClass调用任何函数。

托管DebuggerStepThrough的一些本机等价物。我不想使用CLI。只是在函数/类之前编写的关键字或宏。我还发现了一些东西,一些注册表项修改,但这似乎不是我想要的,或者我不了解它的机制(我甚至不知道注册表项与此有什么关系)。此外,"放置断点"answers"运行到游标"是不可接受的解决方案。

我有一个宏可以精确地做到这一点。它不是很快,但很有用(事实上,我也把它转换成了C#,所以我可以在AddIn中使用它,这要快得多)。只需使用您想要忽略并绑定到F11或您选择的另一个密钥的函数自定义regexp:

 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;
            }
        }
    }

右键单击行并选择"Step into specific"。然后选择您想要的功能。

Visual Studio中有一个不受支持的功能,允许您永久配置调试器,使其不介入某些函数。详细信息在MSDN的博客文章中给出:

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