我正在使用一个遗留的 C Dll(我有源代码),它有许多分散在程序中的断言。C# windows 应用程序正在使用该 dll。
问题是当 DLL 中出现错误时,“断言失败”永远不会出现。Dll 是一个控制台应用程序(不确定这是否相关)。有几十个断言,AFAIK 没有简单的方法可以在不添加大量额外代码的情况下将错误消息(或标志)返回到 C# 应用程序。
有没有办法强制断言的输出到屏幕上?
检查assert()
C 库中宏的定义。它通常具有“可插拔”输出机制。最坏的情况是你必须assert()
自己重写。
这里的根本问题是控制台程序有2 个输出流:正常和错误。该类System.Diagnostics.Process
具有StandardError
可用于拦截写入stderror
流的消息的属性。
请注意,定义 NDEBUG 会关闭断言机制。该标识符在 release-builds (/D-option) 中默认定义。检查断言是否在您的 dll 的调试版本中有效,如果是,请编辑您的发布项目设置以删除 /D 选项或任何 NDEBUG 定义。