2011-03-17 89 views
1

Visual Studio在調試時提出了什麼事件,我可以在代碼中訂閱?具體來說,我想知道調試器何時分離或停止。謝謝從正在調試的代碼附加到調試器事件?

+0

不,調試器必須始終運行在另一個進程中。你只能輪詢。設置斷點並編輯變量值是可能的。 – 2011-03-17 22:43:03

回答

2

在一個單獨的線程中,您可以檢查Debugger.IsAttached方法並相應地生成事件。

編輯:我只是鞭打這件事,看看它是否有效。

public class DebuggerEvents { 

    public delegate void DebuggingStatusChanged(EventArgs e); 
    public event DebuggingStatusChanged DebuggerAttached; 
    public event DebuggingStatusChanged DebuggerUnattached; 

    private readonly Thread workerThread; 
    public DebuggerEvents() { 
     var threadStart = new ThreadStart(BackgoundWorker); 
     workerThread = new Thread(threadStart); 
     workerThread.Start(); 
    } 


    private void BackgoundWorker() { 
     bool currentStateflag = Debugger.IsAttached; 
     while (true) { 

      if (Debugger.IsAttached && !currentStateflag){ 
       DebuggerAttached(new EventArgs()); 
       currentStateflag = true; 
      } 

      if (!Debugger.IsAttached && currentStateflag){ 
       DebuggerUnattached(new EventArgs()); 
       currentStateflag = false; 
      } 

      Thread.Sleep(100); 
     } 

    } 
} 
+0

使用這種技術,如果我點擊停止按鈕,我的事件處理程序是否保證在處理結束之前完成執行? – adam0101 2011-03-17 20:57:52

+0

可能不是。你需要測試一下 – 2011-03-17 20:58:55

+0

那麼可能不適合我。我想回滾事務,可能需要幾秒鐘的時間。 – adam0101 2011-03-17 20:59:51

1

試試這個:

System.Diagnostics.Debugger.IsAttached 

而且查找條件編譯符號,並注意調試符號。