调用Trace.Fail()为何始终中断代码执行?技术咨询
问题原因与解决办法
你遇到的这个自动暂停,本质是调试器对断言失败的自动中断行为,和你开启的“允许调试器步入其他程序集代码”设置直接相关:
- 调用
Trace.Fail()时,默认的DefaultTraceListener会触发断言失败逻辑,调试器检测到这个事件后,会自动中断到触发点的代码位置 - 因为你开了允许调试器进入外部程序集,所以调试器直接跳转到了
TraceInternal.Fail()的内部代码行(也就是你看到的第226行),看起来像有个断点,但其实是调试器的默认中断机制
给你几个解决方向:
- 若不想进入系统框架代码:在IDE调试设置里勾选「仅我的代码」(Just My Code),或者关闭「启用.NET框架源代码单步执行」选项(以Visual Studio为例,路径是工具→选项→调试→常规),这样调试器只会停在你自己的代码里,不会跳转到TraceInternal的内部
- 若想彻底消除暂停行为:替换默认的TraceListener,用自定义实现输出失败信息(比如写入日志文件),示例代码如下:
这样调用// 移除默认的监听 Trace.Listeners.RemoveAt(0); // 添加自定义监听 Trace.Listeners.Add(new TextWriterTraceListener("trace.log"));Trace.Fail()时只会把信息写入日志,不会触发弹窗和调试器中断 - 临时应急方案:如果只是不想在当前场景触发中断,可以临时禁用断言弹窗:
这样Fail时不会弹框,调试器也就不会自动中断((DefaultTraceListener)Trace.Listeners[0]).AssertUiEnabled = false;
内容的提问来源于stack exchange,提问作者TRex
相关产品推荐
相关产品推荐

