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

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

 2006-07-20 11:42:21 来源:WEB开发网   
核心提示: 那些带黑色背景与其它动态 DLLs 之间的区别很微妙:带黑色图标的 DLL 已被加载,要么是用 LoadLibrary 显式加载,定制调试诊断工具和实用程序(7)(3),要么是用其它类似 CoCreateInstance 的 API 函数加载,没有黑色背景图标的 DLL 已被加载,此外,它

那些带黑色背景与其它动态 DLLs 之间的区别很微妙:带黑色图标的 DLL 已被加载,要么是用 LoadLibrary 显式加载,要么是用其它类似 CoCreateInstance 的 API 函数加载。没有黑色背景图标的 DLL 已被加载,因为另外一个 DLL需要它。例如,在 Figure 4 中,BROWSEUI.dll 有一个黑色图标,因为它已被动态加载。而 SHDOCVW.dll 图标没有黑色背景,因为它已被 Windows 自动加载。理由很简单:BROWSEUI.dll 是静态链接到 SHDOCVW.dll 的,所以为了加载 BROWSEUI,Windows 也得加载 SHDOCVW。

另一种“盗取”信息的途径

在结束 Win32 调试 API 的讨论之前,我想用一点点时间讨论异常处理机制。当被调试程序中有异常发生时,调试器通过 EXCEPTION_DEBUG_EVENT 收到通知,并且 u.Exception.ExceptionRecord.ExceptionCode 域中会包含此异常编码。异常编码都分布在 WINNT.H 和 WINBASE.H 文件中,因此要获得一个全面而且清晰易读的异常编码清单并不是件容易的事。CApplicationDebugger 的 GetExceptionDescription 方法将这些异常编码转换成可读性更强的字符串。

另一个异常编码清单信息源是 Visual C++ 本身。在调试应用程序时,“Debug”菜单中有一个“Exception”菜单项,它允许你选择调试器处理异常的方式,如 Figure 10 所示:

Figure 10 Exceptions Dialog

你可能会感到惊讶,在这里能发现没有定义过的异常编码。不用动手拷贝,从这个列表框“盗取”信息不是很好吗。这便是 WindowDump 的目的。它允许你用鼠标拾取某个窗口(通过其句柄值)并将信息 dump 到一个编辑框中。此外,它还能收集类信息和式样描述信息,如 Figure 11 所示。

上一页  1 2 3 4  下一页

Tags:定制 调试 诊断

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