2011-03-17 87 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 

而且查找条件编译符号,并注意调试符号。