【问题标题】:How to get handle to an event that may cause my application to go in hang state如何处理可能导致我的应用程序进入挂起状态的事件
【发布时间】:2011-09-02 14:35:38
【问题描述】:

我正在对应用程序挂起问题进行转储文件分析。这是堆栈跟踪中有趣的一行。

0bc2f3e4 75a8bd1e 0bc2f298 0bc2f30c 00000001 ntdll!KiFastSystemCallRet
0bc2f32a 6a393c42 00000001 7ffdf000 00000001 kernel32!WaitForMultipleObjectsEx+0x8e

看MSDN中WaitForMultipleObjectEx的描述,第二个参数是const HANDLE *lpHandles。这让我觉得我应该能够做一个 !handle 7ffdf000 来弄清楚它在等待哪个事件,但是当我这样做时,我会关注

类型错误检索类型

有什么想法我可能在这里做错了,或者有什么提示可以获取有关挂起原因的更多详细信息?

【问题讨论】:

    标签: windbg crash-dumps sos


    【解决方案1】:

    第二个参数是指向 HANDLE 数组的指针。在您的情况下,由于数组的大小为 1,您应该能够使用命令转储句柄
    !handle poi 7ffdf000

    【讨论】:

    • 谢谢。它给了我句柄 08000000。任何想法这是什么意思?如果我运行 !handle 08000000;它只是给了我相同的结果(句柄 08000000)。
    • 地址 08000000 看起来很奇怪,不确定句柄的值是否正确,它们通常是较小的整数。还有一件事。由于您正在使用转储文件,因此您需要使用其中的句柄信息创建转储文件。命令是.dump /mh.dump /ma
    • 好的。尝试输入!handle 08000000 7。这将在句柄上打印更详细的信息。
    • !handle 08000000 7 Handle 08000000 类型 无法查询对象信息 无法查询对象信息
    • 转储文件是通过右键单击任务管理器下已处理选项卡中的进程名称生成的。此外,当我运行 !handle 命令时,它会显示很长的列表,这让我认为它包含句柄信息
    【解决方案2】:

    “dd 7ffdf000”呢?第一个 I4 是句柄。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多