如何在.cpp文件的每个函数中放置断点?
有宏吗?使用哪个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了解更多详细信息。