0

我正在使用第 3 方工具,它使用第 4 方插件。有时,该工具会在启动时挂起。查看堆栈跟踪,我可以看到有几个线程正在 WaitForSingleObject 上等待,我敢打赌它们会互相阻塞。一些线程从第 3 方工具开始,一些从第 4 方插件开始。

我想做的是向 3rd 方工具供应商提出最详细的投诉,假设这是它的错(我不相信他们的本地支持会自己获取这些详细信息)。为此,我想:

  1. 找出当前等待的同步对象是什么
  2. 找出谁创建了这些同步对象

目前手头的工具是 VS2005、WinDbg 和 Process Explorer。操作系统是 Window 7 64 位。有什么建议么?

4

1 回答 1

1

我习惯了WinDBG,所以我可以给你一些东西来试试。首先是让你的符号正确:

.symfix c:\websymbols .reload

并且您的堆栈帧深度增加了:

.kframes 1000

然后我会选择 !uniqstack,它将消除重复的堆栈并为您节省一些时间:

!uniqstack -b

然后是挑选并尝试找到循环依赖的问题。不幸的是,如果没有更多关于挂起的信息,很难给出太多指导。您也可以尝试 !locks 看看是否可以解决您的问题(仅有助于解决关键部分死锁)。

从内核调试会话中找出它正在等待的同步对象要容易得多,在用户模式下,您将需要跟踪句柄并在每个句柄上执行一个 !handle。exe是32位还是64位?

就确定谁创建了对象而言,最好的办法是通过 !htrace 打开句柄跟踪,运行场景,然后将跟踪日志转储出去。

祝你好运,

-斯科特

于 2010-05-13T19:42:43.150 回答