【问题标题】:Attach to debugger events from code being debugged?从正在调试的代码附加到调试器事件?
【发布时间】:2011-07-17 17:40:13
【问题描述】:

Visual Studio 在调试时是否会引发任何我可以在代码中订阅的事件?具体来说,我想知道调试器何时分离或停止。谢谢

【问题讨论】:

  • 不,调试器必须始终在另一个进程中运行。你只能轮询。可以设置断点和编辑变量值。

标签: visual-studio visual-studio-2010 events debugging


【解决方案1】:

在单独的线程中,您可以检查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);
         }

     }
 }

【讨论】:

  • 使用这种技术,如果我点击停止按钮,我的事件处理程序是否可以保证在进程结束之前完成执行?
  • 可能不会。你需要测试一下
  • 那时可能对我不起作用。我想回滚一个事务,这可能需要几秒钟。
  • 在我按下停止按钮后试图让它写入文件,但不走运。还是谢谢。
  • 不过,这可能适用于人们附加和分离未结束的正在运行的进程。如果我遇到这种情况,我会记住这一点。
【解决方案2】:

试试这个:

System.Diagnostics.Debugger.IsAttached  

还要查找条件编译符号,注意DEBUG符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多