【问题标题】:Find hwnd information in a user mode dump in windbg在 windbg 的用户模式转储中查找 hwnd 信息
【发布时间】:2014-02-25 20:38:43
【问题描述】:

我正在尝试解决我的一个应用程序崩溃问题,调用堆栈的顶部看起来像这样

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 内部的,是否有任何扩展程序可供每个人使用以显示此信息?

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

【问题讨论】:

    标签: c++ visual-c++ windbg hwnd window-handles


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多