如何在c dll中使用assert

时间:2012-08-26 14:12:19

标签: c# c dll assert

我正在使用遗留的C Dll(我有源代码),它有许多分散在程序中的断言。该DLL由C#windows应用程序使用。

问题是当DLL中存在错误时,“断言失败”永远不会出现。 Dll是一个控制台应用程序(不确定是否相关)。有几十个断言,而AFAIK没有简单的方法可以将错误消息(或标志)带回C#应用程序,而无需添加大量额外代码。

有没有办法强制断言输出到屏幕?

2 个答案:

答案 0 :(得分:3)

检查C库中assert()宏的定义。它通常具有“可插拔”输出机制。最糟糕的情况是你必须自己重写assert()

这里的根本问题是控制台程序有 2 输出流:正常和错误。 System.Diagnostics.Process类具有StandardError属性,可用于拦截写入stderror流的消息。

答案 1 :(得分:1)

请注意,定义NDEBUG会关闭断言机制。该标识符在release-builds中定义为默认值(/ D-option)。检查断言是否在您的dll的调试版本中工作,如果是,请编辑您的发布项目设置以删除/ D选项或任何NDEBUG定义。