2

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

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

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

4

2 回答 2

3

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

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

于 2012-08-26T14:30:54.177 回答
1

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

于 2012-08-26T14:21:15.423 回答