如何在.cpp文件的每个函数中放置断点?

时间:2020-03-06 15:00:04  来源:igfitidea点击:

有宏吗?使用哪个DTE对象?

解决方案

我不知道要使用什么DTE函数,但是我们可以非常简单地记录一个可以完成此操作的宏:

  • 转到文件顶部
  • Ctrl-Shift-R(开始录制)
  • ctrl-I(增量搜索)
  • {(搜索第一个{字符)。
  • F9(设置断点)
  • ctrl-](转到匹配的}字符)
  • Ctrl-Shift-R(停止录制)

现在,只需一遍又一遍地运行它(重复按ctrl shift P),直到到达文件末尾。

如果我们有名称空间,则将4.更改为:

  • ((在函数定义的开头搜索"(")
  • esc(停止增量搜索)
  • ctrl-I(再次进行增量搜索)
  • {(功能主体的开始)

可以无限修改此类内容以适合代码库

将其放在文件顶部:

#define WANT_BREAK_IN_EVERY_FUNCTION

#ifdef WANT_BREAK_IN_EVERY_FUNCTION
#define DEBUG_BREAK DebugBreak();
#else
#define DEBUG_BREAK 
#endif

然后在每个函数的开头插入DEBUG_BREAK,如下所示:

void function1()
{
    DEBUG_BREAK
    // the rest of the function
}

void function2()
{
    DEBUG_BREAK
    // the rest of the function
}

当我们不再希望调试中断时,请注释以下行

// #define WANT_BREAK_IN_EVERY_FUNCTION

在文件的顶部。

这是在WinDbg中可以实现的类似方法:

bm mymodule!CSpam::*

这在模块mymodule中的类(或者名称空间)CSpam的每个方法中都设置了断点。

我仍在寻找与Visual Studio中此功能相似的任何东西。

这是1800 INFORMATION的想法的快速实现:

Sub TemporaryMacro()
    DTE.ActiveDocument.Selection.StartOfDocument()
    Dim returnValue As vsIncrementalSearchResult
    While True
        DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.StartForward()
        returnValue = DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.AppendCharAndSearch(AscW("{"))
        DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.Exit()
        If Not (returnValue = vsIncrementalSearchResult.vsIncrementalSearchResultFound) Then
            Return
        End If
        DTE.ExecuteCommand("Debug.ToggleBreakpoint")
        DTE.ExecuteCommand("Edit.GotoBrace")
        DTE.ActiveDocument.Selection.CharRight()
    End While
End Sub

就像康斯坦丁的方法...好像是windbg领域。

由于我们拥有cpp,(即使我们没有cpp,也可以编写一些脚本来完成),因此将logger的logger部分用作Windows调试工具应该没问题...这是一个非常方便的工具,可耻的是很少有人用它。

记录器可轻松调试C / COM / C ++,具有丰富的符号信息,钩子/配置文件/灵活的工具;

激活Logger的一种方法是启动CDB或者WinDbg并照常连接到用户模式的目标应用程序。然后,使用!logexts.logi或者!logexts.loge扩展命令。
这将在当前断点处插入代码,该代码将跳至在目标应用程序进程中加载​​和初始化Logexts.dll的例程。这称为"将Logger注入目标应用程序"。

(这不是我们想要的,但是几乎是:)

我们可以通过打开"新建断点"对话框并输入以下内容,在Visual Studio中的类的每个成员函数上放置一个断点:

CMyClass::*

参见http://blogs.msdn.com/b/habibh/archive/2009/09/10/class-breakpoint-how-to-set-a-breakpoint-on-ac-class-in-the-visual-studio -debugger.aspx了解更多详细信息。