Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用自定义的`TraceListener'记录断言消息`_C#_Logging_Trace_Assert - Fatal编程技术网

C# 如何使用自定义的`TraceListener'记录断言消息`

C# 如何使用自定义的`TraceListener'记录断言消息`,c#,logging,trace,assert,C#,Logging,Trace,Assert,我实现了一个自定义的TraceListener,它使用Win32 API函数OutputDebugString记录发送到方法Write的消息,并将它们输出到Win32跟踪。每当我的应用程序使用System.Diagnostics.Debug.Write或System.Diagnostics.Trace.Write时,跟踪侦听器都会正确处理消息 但是,如果我的应用程序遇到断言,例如System.Diagnostics.Debug.Assert,我希望截获发送到调试输出的内容。不知何故,跟踪侦听器不

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


但是,如果我的应用程序遇到断言,例如
System.Diagnostics.Debug.Assert
,我希望截获发送到调试输出的内容。不知何故,跟踪侦听器不会被断言生成的消息调用。这可能吗?或者我必须提供自己的
Assert
实现才能工作吗?

您是在发布模式下构建的吗?Assert为调试符号定义了ConditionalAttribute,以便编译器在发布模式下删除这些调用


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

否,我正在调试环境中运行。assert显示一个警报框,并将其输出转储到附加的调试器(例如DbgView),但它似乎没有通过跟踪侦听器。你是对的,我必须重写Fail方法。请编辑您的回复以反映这一点,以便我可以接受您的回答。