当C#调试器从进程中分离时运行代码

7

我目前正在尝试在调试器从进程中分离时运行一些代码。判断调试器是否已连接相对容易:

System.Diagnostics.Debugger.IsAttached;

我的问题是,是否有一种方法(最好适用于.NET、Windows Phone和WinRT),可以在调试器断开连接时(大多数情况下是应用程序被终止时)触发一个事件。

最坏的情况下,我可以在.NET中找到调试器进程并订阅Exit事件,但这在Windows Phone和WinRT上不起作用。

1个回答

2

可能最简单的方法是创建一个线程来监视该值。类似于:

public class DebugEventArgs : EventArgs {
    public bool Attached { get; set; }
}
class Watcher {
    public event EventHandler<DebugEventArgs>  DebuggerChanged;

    public Watcher() {
        new Thread(() => {
            while (true) {
                var last = System.Diagnostics.Debugger.IsAttached;
                while (last == System.Diagnostics.Debugger.IsAttached) {
                    Thread.Sleep(250);
                }
                OnDebuggerChanged();
            }
        }){IsBackground = true}.Start();
    }

    protected void OnDebuggerChanged() {
       var handler = DebuggerChanged;
       if (handler != null) handler(this, new DebugEventArgs { Attached = System.Diagnostics.Debugger.IsAttached });
    }
}

(仅写作但未编译)


我担心这可能是唯一的问题。虽然不是最好的,但可能是我们唯一的问题。谢谢! - Geert van Horrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接