c++ - 阻止调试器进入功能

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

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

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

这是我正在谈论的例子:

stepToThisFunction(objectOfIgnoreClass->ignoreFunction());

当调试器在这一行时,按 F11 应该只输入 stepToThisFunction,单步执行 ignoreFunction() 或可能来自 objectOfIgnoreClass.

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

最佳答案

我有一个宏可以精确地执行此操作。它不是很快,但是非常有用(事实上我已经将它转换为 C#,所以我可以在 AddIn 中使用它,这要快得多)。只需使用您要忽略的功能自定义正则表达式并绑定(bind)到 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;
            }
        }
    }

关于c++ - 阻止调试器进入功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330184/

相关文章:

c++ - 比较不同大小的数组

使用 DLL 函数崩溃后 C++ 分配内存

c# - 为什么我得到 'Assembly ' *.dll' must be strong signed in order to be marked as a prerequisite.'?

c++ - 在 x64 上获取没有 __asm 的 SSE 版本

C++ Bitfield Struct size definition(为什么打包得更大?)

c++ - 引用动态分配的对象 ("at run-time")

css - 如何防止 CSSTidy 删除 *property IE7 Hack? (或另一个独立工具)

c++ - 无效 vector <T> 下标

c# - 创建更多可测试的代码,同时避免静态/非静态字段初始值设定项问题

c# - 在 Visual Studio 中制作 4 面图/4 面(笛卡尔)网格