我知道我可以使用Debugger.IsAttached检测是否附加了调试器,但我希望能够执行类似的操作
if (Debugger.IsAttached && Debugger.BreakpointIsSet && Debugger.BreakpointHitCount > 0)
timeout *= 100;
someEvent.WaitOne(timeout);
原因是我的一些测试场景涉及其他线程上的事件。在调试器下查看事物自然会扰乱此过程。我希望我的主测试线程在其他线程上的断点命中后单步执行时阻塞更长时间,但如果未附加调试器,或者尚未命中断点,则不会阻塞很长时间.
是否有可能与上面的情况等效;例如,使用 P/Invoke 来实现非托管调试 API?
最佳答案
我不确定我完全理解你计划在这里实现什么 - 但听起来无论解决方案可能是什么,它只会阐述当你的线程向每个线程发出信号时真正发生的事情的确定性和困惑其他,这本身就很令人困惑,尤其是在附加调试器时。
我想说你最好远离这个调试器并做好“printf 调试”,当然还要查看生成每条消息的 ThreadID。
也就是说,如果您仍然希望为此使用调试器,那么在其他线程都被阻塞时仅查看一个线程(并且仅一个线程)并监视其可能会很有用。系统进入损坏状态时的事件 - 此链接可能对此有所帮助: http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/07/17/automatically-freezing-threads-brrrrr.aspx
关于.net - 如何检测是否已连接调试器*以及*是否已设置或命中断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422018/