【问题标题】:How to log assert messages with a custom `TraceListener`如何使用自定义的“TraceListener”记录断言消息
【发布时间】:2011-10-05 04:21:29
【问题描述】:

我已经实现了一个自定义TraceListener,它使用Win32 API 函数OutputDebugString 记录发送到方法Write 的消息并将它们输出到Win32 跟踪。每当我的应用程序使用System.Diagnostics.Debug.WriteSystem.Diagnostics.Trace.Write 时,跟踪侦听器都会正确处理消息。

但是,如果我的应用程序遇到System.Diagnostics.Debug.Assert 之类的断言,我想拦截发送到调试输出的内容。不知何故,跟踪侦听器不会被断言产生的消息调用。这可能吗?还是我必须提供自己的 Assert 实现才能使其正常工作?

【问题讨论】:

    标签: c# logging trace assert


    【解决方案1】:

    您是在发布模式下构建吗? Debug.Assert 定义了 DEBUG 符号的 ConditionalAttribute,以便编译器在发布模式下删除调用。

    Debug.Assert 调用跟踪侦听器上的 Fail 方法。这是否正确实施?如果您没有覆盖它,那么它默认调用前面带有“Fail:”的 WriteLine。

    【讨论】:

    • 不,我在调试环境中运行。断言显示一个警告框并将其输出转储到附加的调试器(例如 DbgView),但它似乎没有通过跟踪侦听器。
    • 你说得对,我不得不重写 Fail 方法。请编辑您的回复以反映这一点,以便我接受您的回答。
    猜你喜欢
    • 2011-10-21
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多