定制调试诊断工具和实用程序(6)
2006-07-20 11:42:24 来源:WEB开发网Figure 3 调试事件流
CApplicationDebugger
调用 CreateProcess 的线程必须是进入调试循环的线程。既然调试器阻塞于 WaitForDebugEvent,因此最好让这部分代码运行在一个与主UI线程不同的专门线程中。本文将其行为包装在 CApplicationDebugger 类中,其声明参见本文附带源代码中的 ApplicationDebugger.h 文件,这个类的一部分灵感还来自 Matt Pietrek 的 LoadProf32(参见 MSJJul95.exe)。
CApplicationDebugger 是一个虚拟类,因为你得从它派生并实现自己的重写版本,以便特定的调试事件发生时进行相应的调用。这个类被用于生成 LoadLibrarySpy(参见 Figure 4),这是一个调试程序和监控 DLL 加载和卸载的工具,不论是静态加载还是动态加载,也不论是不是有加载地址冲突,它都能监控。
Figure 4 LoadLibrarySpy
调用 CreateProcess 是在 CApplicationDebugger::LoadTheProcess 中进行的,为简单起见,参数使用 DEBUG_ONLY_THIS_PROCESS。如果需要,你可以将 CApplicationDebugger 扩展成能处理来自多个被调试进程的事件,对于 MMC 管理单元(snap-ins)很有用。
CLoadLibrarySpyDlg 类负责对话框自身的处理,同时也是暗中监视 CApplicationDebugger 派生类的线程宿主。CModuleListCtrl 类负责显示附属到每个DLL的详细信息 CModuleInfo*;针对每个 DLL,这个类存储的详细信息见 Figure 5。
当某个 DLL 被加载,对话框便调用 AddModule 方法;反之卸载DLL时,则执行 RemoveModule 方法。这两个方法都以 UpdateModule 方法告终,从而更新与该 DLL 对应的 CModuleObject 对象的 m_nLoaded 或 m_nRemoved。如果不存在这样的对象,则会创建一个新的对象,并将它添加到列表框中。
- ››调试SQL server 2008功能设置
- ››调试JavaScript错误
- ››定制个性化的对话框窗口类
- ››定制 SWT/RCP 界面:如何编写一个漂亮的 SWT/RCP ...
- ››调试和测试 Swing 代码
- ››定制基于 Visual studio 2005 平台 Windows CE(AR...
- ››定制版黑雨 blackra1n 越狱3.1.2 全系 iPhone
- ››调试集成 Java 和 C/C++ 的代码
- ››定制 Eclipse RCP 应用程序,第 1 部分: 可与 SWT...
- ››调试JavaScript脚本程序(Firefox篇)
- ››调试JavaScript/VB Script脚本程序(ASP.NET篇)
- ››调试JavaScript/VB Script脚本程序(Wscript篇)
更多精彩
赞助商链接