.net - 如何检测是否已连接调试器*以及*是否已设置或命中断点?

标签 .net debugging visual-studio-debugging breakpoints

我知道我可以使用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/

相关文章:

c# - 像 Smarty 这样的模板语言可用于 dotnet

.net - 使用 .NET 字符串格式化,如何格式化字符串以显示零 (0) 的空白(空字符串)?

c# - 领域驱动设计 : Manager and service

debugging - 关闭tomcat服务器时出错

c++ - 调试断言失败 OpenCv is_block_type_valid(header->_block_use)

visual-studio - 被调试的进程究竟如何危害调试进程(机器)?

c# - 为什么子任务的众多异常中只传播其中之一?

.net - ADO.NET 与 WCF

debugging - 如何使用Racket博士逐步调试一个Scheme程序?

javascript - 如何在 Firebug 中检查网页的动态悬停元素?