如何使用自定义“TraceListener”记录断言消息

发布于 2024-12-08 09:20:22 字数 382 浏览 0 评论 0原文

我实现了一个自定义 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧故 2024-12-15 09:20:23

您是否在发布模式下构建? 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: ".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文