【问题标题】:How to use assert in c dll如何在c dll中使用assert
【发布时间】:2012-08-26 14:12:19
【问题描述】:

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

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

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

【问题讨论】:

  • 你有 dll 的调试或发布版本吗?
  • 两者。我有源代码,所以可以构建任何一个。

标签: c# c dll assert


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • DLL 是一个控制台应用程序,由 Windows C# 应用程序调用。所以所有控制台输出都丢失了。断言被击中;那不是问题。问题是由于 C# 应用程序处于控制之下,控制台输出永远不会出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多