加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 阻止调试器进入函数

发布时间:2020-12-16 03:07:14 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来阻止Visual Studio调试器在按下F11时进入某些类和函数.或阻止某些文件,以便IDE不会打开它们,只是步骤低谷(除非出现异常). 我知道这听起来有点愚蠢,但是我使用智能指针和其他辅助类,许多重载操作符,简单表达式由许多函数调用组成,它们在
我正在寻找一种方法来阻止Visual Studio调试器在按下F11时进入某些类和函数.或阻止某些文件,以便IDE不会打开它们,只是步骤低谷(除非出现异常).

我知道这听起来有点愚蠢,但是我使用智能指针和其他辅助类,许多重载操作符,简单表达式由许多函数调用组成,它们在优化时消失,因此它不是速度问题,而是调试问题,打开和关闭许多文件,经历许多功能,意外地离开目标代码等等.

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

stepToThisFunction(objectOfIgnoreClass->ignoreFunction());

当调试器在这一行时,按F11应该只输入stepToThisFunction,逐步执行ignoreFunction()或者可能从objectOfIgnoreClass调用任何函数.

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

解决方法

我有一个宏来做到这一点.它不是很快,但它非常有用(实际上我也将它转换为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;
            }
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读