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

Gee*_*rik 7 c# debugging windows-phone windows-runtime

我正在尝试在调试器从进程中分离时运行一些代码.很容易找出是否附加了调试器:

System.Diagnostics.Debugger.IsAttached;
Run Code Online (Sandbox Code Playgroud)

我的问题是,当调试器被分离时(大多数是在应用程序被杀死时),有一种方法(最好是适用于.NET,Windows Phone,WinRT的方法)来获取事件.

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

Iai*_*ard 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 });
    }
}
Run Code Online (Sandbox Code Playgroud)

(已编写但未编译)