WEB开发网
开发学院软件开发VC 定制调试诊断工具和实用程序(7) 阅读

定制调试诊断工具和实用程序(7)

 2006-07-20 11:42:21 来源:WEB开发网   
核心提示: 在 LoadLibrarySpy 工具中,启动被调试程序之前,定制调试诊断工具和实用程序(7)(2),与被调试程序对应的 GFlags 值会被 CApplicationDebugger 的 PreLoadingProcess 更新,其以前的值会被保存在 PostMortem 中,图标的颜色

在 LoadLibrarySpy 工具中,启动被调试程序之前,与被调试程序对应的 GFlags 值会被 CApplicationDebugger 的 PreLoadingProcess 更新,其以前的值会被保存在 PostMortem 中,也就是说,因为使用“LDR”作为前缀,所以调试器从 Windows Loader 得到的专用输出信息很容易在 OnOutputDebugStringDebugEvent 中过滤。

这种 Loader 日志的一个主要优点是输出信息前都有一个 LDR:自动化 DLL 重定位信息。它解释哪个 DLL 与另外的 DLL 有地址冲突。这既是 CModuleListCtrl 获取 Reason 栏数据的方法。不幸的是,Windows 2000 Loader 好像抑制这种特定的输出信息。如果你过去习惯于通过加载某个进程来存取其资源,如 explorer.exe 的动画或图标,0x400000 加载地址通常已经被你的程序使用,Loader 会自动进行重定位。在这种特殊情况下,即便是在 Windows NT 4.0,它都不会发出 LDR:为动态加载进程自动化 DLL 重定向。

另外一个解决方案是枚举每个加载的 DLL 并与专用的地址空间区域(从 hModule 开始)进行比较,从而找到冲突者(实现细节参见 CLoadLibraryDebugger::OnLoadDLLDebugEvent)。加载器还提供另外一个带前缀“LDR:Loading (DYNAMIC)”的有趣的信息,同时其后跟随模块的全路径名。当某个 DLL 被显示通过 LoadLibrary 加载时,似乎就是这种情况。

使用这些来自 Windows Loader 的线索,LoadLibrarySpy 根据加载状态为每个 DLL 提供了一个专门的图标,详情参见 Figure 9。

带方形图标的 DLLs 是在进程初始化期间加载的,称为静态加载。带圆形图标的则是在进程初始化之后加载的,因此称为动态加载。图标的颜色预示着是否有加载地址冲突,红色表示有,蓝色表示没有。

上一页  1 2 3 4  下一页

Tags:定制 调试 诊断

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接