如何使用自定义“TraceListener”记录断言消息
我实现了一个自定义 TraceListener
,它既记录发送到方法 Write
的消息,又使用 Win32 API 函数 OutputDebugString
将它们输出到 Win32 跟踪。每当我的应用程序使用 System.Diagnostics.Debug.Write 或 System.Diagnostics.Trace.Write 时,跟踪侦听器都会正确处理消息。
但是,如果我的应用程序遇到诸如 System.Diagnostics.Debug.Assert 之类的断言,我想拦截发送到调试输出的内容。不知何故,跟踪侦听器不会被断言生成的消息调用。这可能吗?或者我是否必须提供自己的 Assert
实现才能使其正常工作?
I have implemented a custom TraceListener
which both logs the messages sent to method Write
and outputs them to the Win32 trace, using the Win32 API function OutputDebugString
. Whenever my application uses System.Diagnostics.Debug.Write
or System.Diagnostics.Trace.Write
, the messages get properly handled by the trace listener.
However, if my application runs into an assertion such as System.Diagnostics.Debug.Assert
I would like to intercept what is sent to the debug output. Somehow, the trace listener does not get called with the messages produced by the assert. Is this possible? Or do I have to provide my own implementation of Assert
in order for this to work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否在发布模式下构建? Debug.Assert 定义了 DEBUG 符号的 ConditionalAttribute,因此编译器在发布模式下会删除这些调用。
Debug.Assert 在跟踪侦听器上调用 Fail 方法。执行正确吗?如果您没有覆盖它,那么它默认调用前面带有“Fail:”的 WriteLine。
Are you building in Release mode? Debug.Assert has the ConditionalAttribute for the DEBUG symbol defined so the calls are removed by compiler in Release mode.
Debug.Assert calls the Fail method on your trace listener. Is that implemented correctly? If you haven't overridden it, then it defaults to calling WriteLine prepended with "Fail: ".