代码之家  ›  专栏  ›  技术社区  ›  Eran

识别挂起两个第三方可执行文件的同步对象

  •  0
  • Eran  · 技术社区  · 14 年前

    我正在使用第三方工具,它使用第四方插件。有时,工具在启动时会挂起。查看堆栈跟踪,我可以看到一些线程正在等待单个对象,我敢打赌它们正在阻塞彼此。有些线程从3rt party工具开始,有些线程从4th party插件开始。

    我想做的是将最详细的投诉提交给第三方工具供应商,假设是它的错(我不相信他们的本地支持自己获得这些详细信息)。为此,我想:

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

    目前使用的工具有vs2005、windbg和process explorer。操作系统是Windows7 64位。有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   snoone    14 年前

    我已经习惯了windbg,所以我可以给你一些东西去尝试一下。首先,要使你的符号正确:

    .symfix c:\websymbols 重新加载

    你的堆栈帧深度提高了:

    kFrAMS 1000

    那我就去!uniqstack,它将消除重复的堆栈并节省您一些时间:

    !UnqStay-B

    然后是一个挑选并试图找到循环依赖性的问题。不幸的是,如果没有更多关于挂起的信息,很难给出很多指导。你也可以试试!锁定以查看是否能为您解决这个问题(只对关键的部分死锁有帮助)。

    在内核调试会话中,从用户模式中,您需要跟踪句柄并执行一个操作,从而可以更容易地确定它正在等待的同步对象。每个都有把手。exe是32位还是64位?

    在确定对象是谁创建的方面,您最好的选择是打开句柄跟踪通过!htrace,运行场景,然后转储跟踪日志。

    祝你好运,

    -史葛

    推荐文章