2012-04-17 50 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