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