2012-04-17 51 views
0

我们正在使用MDBG附加到IIS工作进程。Mdbg:无法从进程中分离

执行堆栈快照后,我们使用MDBgProcess.Detach()进行分离。

虽然此调用通常需要10-80ms,但偶尔会挂起很长时间,同时也会冻结进程。

这是不可接受的,因为这个过程是一个生产程序。

这里是我们的完整代码:

try 
{ 
    proc.AsyncStop(); 
} 
finally 
{ 
    // Make sure we are able to detach 
    try 
    { 
     // delete all breakpoints 
     proc.Breakpoints.DeleteAll(); 
    } 
    catch (Exception e){} 
    finally 
    { 
     // detach and wait 
     var waitHandle = proc.Detach(); 
     if (proc.CanExecute()) 
     { 
      waitHandle.WaitOne(); 
     } 
    } 
} 

为什么这可能发生的任何想法,我们能做些什么呢?

最佳, 迈克

回答

0

我不知道为什么它会挂断电话,但我认为你可能有一个竞争条件 - 在我的计划,我阻止,直到处理上使用了WaitOne()停止Stop()...

proc.AsyncStop().WaitOne(); 
m_Debugger.Processes.Active.Breakpoints.DeleteAll(); 
proc.CorProcess.Detach(); // I don't wait here because this is where my prog ends