在 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 操作,看起来模块正在卸载,但仍然存在窗口并且没有正确销毁,

我想知道有关我的hwnd的信息,这里是002051e,例如窗口标题,窗口程序和其他详细信息。

我尝试在堆上搜索地址以查找与之相关的任何信息,但我找不到任何信息。

有一些扩展程序,如 !hwnd 可用,可以显示 hwnd 信息,但我想这些扩展是Microsoft内部的,是否有任何扩展可供每个人显示此信息?

有什么方法可以找到这些信息吗?

我不知道

任何WinDbg内置命令,所以我可能会指出SDbgExt,它根据需要提供了确切的!hwnd命令。它输出窗口标题和类、窗口样式和扩展样式、父窗口句柄和其他可能感兴趣的信息。不幸的是,SDbgExt 仅适用于实时调试,因为它从系统而不是进程的内存中获取该信息。如果它在转储中工作,那么您的转储和实时系统之间存在冲突,您将获得完全误导性的信息。

这样做的原因是窗口和消息队列由 Windows 内核处理,因此用户模式转储中没有该信息。您需要内核转储才能获取该信息 - SDbgExt 可能不是为该用途而设计的。

最新更新