Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windbg 对COM+;应用程序死锁_Windbg_Deadlock_Com+ - Fatal编程技术网

Windbg 对COM+;应用程序死锁

Windbg 对COM+;应用程序死锁,windbg,deadlock,com+,Windbg,Deadlock,Com+,我正在尝试对间歇性死锁的COM+应用程序进行故障排除。上次它被锁定时,我能够获取dllhost进程的用户模式转储,并使用WinDbg对其进行分析。检查完所有线程和锁后,可以归结为该线程拥有的关键部分: ChildEBP RetAddr Args to Child 0deefd00 7c822114 77e6bb08 000004d4 00000000 ntdll!KiFastSystemCallRet 0deefd04 77e6bb08 000004d4 00000

我正在尝试对间歇性死锁的COM+应用程序进行故障排除。上次它被锁定时,我能够获取dllhost进程的用户模式转储,并使用WinDbg对其进行分析。检查完所有线程和锁后,可以归结为该线程拥有的关键部分:

ChildEBP RetAddr  Args to Child              
0deefd00 7c822114 77e6bb08 000004d4 00000000 ntdll!KiFastSystemCallRet
0deefd04 77e6bb08 000004d4 00000000 0deefd48 ntdll!ZwWaitForSingleObject+0xc
0deefd74 77e6ba72 000004d4 00002710 00000000 kernel32!WaitForSingleObjectEx+0xac
0deefd88 75bb22b9 000004d4 00002710 00000000 kernel32!WaitForSingleObject+0x12
0deeffb8 77e660b9 000a5cc0 00000000 00000000 comsvcs!PingThread+0xf6
0deeffec 00000000 75bb21f1 000a5cc0 00000000 kernel32!BaseThreadStart+0x34
它正在等待的对象是一个事件:

0:016> !handle 4d4 f
Handle 000004d4
  Type          Event
  Attributes    0
  GrantedAccess 0x1f0003:
         Delete,ReadControl,WriteDac,WriteOwner,Synch
         QueryState,ModifyState
  HandleCount   2
  PointerCount  4
  Name          <none>
  No object specific information available
0:016>!手柄4D4F
处理000004d4
类型事件
属性0
授权访问0x1f0003:
删除、读控制、写控制、写所有者、同步
QueryState,ModifyState
HandleCount 2
指针计数4
名称
没有特定于对象的信息可用
据我所知,事件从未收到信号,导致线程挂起并在进程中挂起其他几个线程。有人对接下来的步骤有什么建议吗

现在,鉴于该方法被称为PingThread,它是否可能正在尝试ping进程中已经死锁的另一个线程

更新
这实际上是Oracle 10.2.0.1客户端中的一个bug。尽管如此,我仍然对如何在不发现Oracle bug数据库中的bug的情况下解决这个问题感兴趣。

可以帮助您解决COM中的锁

这是关于这个的


如果您在使用此扩展时遇到任何问题,请发回您可以使用
!locks
将尝试自动分析死锁,然后转储线程的调用堆栈
~*kb
,并检查哪些线程正在关键部分或事件对象上等待

这里有一个示例用法:

另外,这个家伙的网站有很多使用WinDbg处理其他类型死锁的例子,包括托管代码:只需在页面上搜索“死锁”,希望这能有所帮助