2014-02-25 51 views
0

我试图解决我的应用程序崩溃的一个调用堆栈的顶部看起来像这样查找在WinDbg中用户模式转储HWND信息

0012f480 7739b6e3 0002051e 0000001f 00000000 <Unloaded_A.dll>+0x172b6 
0012f4ac 7739b874 15b772b6 0002051e 0000001f user32!InternalCallWinProc+0x28 
0012f524 7739c8b8 0b4d074c 15b772b6 0002051e user32!UserCallWinProcCheckWow+0x151 (FPO: [Non-Fpo]) 
0012f580 7739c9c6 02acfc48 0000001f 00000000 user32!DispatchClientMessage+0xd9 (FPO: [Non-Fpo]) 
0012f5a8 7c8283c6 0012f5c0 00000018 0012f6f8 user32!__fnDWORD+0x24 (FPO: [Non-Fpo]) 
0012f5d4 7738a8db 77388416 0002051e 00000000 ntdll!KiUserCallbackDispatcher+0x2e (FPO: [0,0,0]) 
0012f5ec 0d58c9a6 0002051e 00000000 0012f61c user32!NtUserCallHwndParamLock+0xc 

以上是我的转储和外观做KV像模块正在卸载,但有窗口仍然存在,并没有被正确销毁,

我想知道关于我的HWN的信息,这里是002051e像窗口标题,窗口程序和其他细节。

我试图在堆上搜索地址以找到与它有关的任何信息,但我无法找到任何信息。

有一些像!hwnd这样的扩展可以显示hwnd信息,但我猜测它们是微软内部的,是否有任何扩展可用于显示这些信息?

有没有什么办法可以找到这些信息?

回答

1

我不知道任何WinDbg的内置命令,所以我可能会指向你SDbgExt根据需要提供完全!HWND命令。它输出窗口标题和类,窗口样式和扩展样式,父窗口句柄以及其他可能有趣的信息。不幸的是,SDbgExt只能在实时调试中工作,因为它从系统获取信息而不是过程的内存。如果它在转储中工作,那么转储和实时系统之间会发生冲突,并且您将获得完全误导性的信息。

原因是Windows和消息队列由Windows内核处理,所以在用户模式转储中没有这些信息。您需要内核转储才能获得该信息 - 并且SDbgExt可能不是为此设计的。