2012-08-26 50 views
2

我正在使用遺留的C Dll(我有源代碼),這些C Dll通過程序分散了許多斷言。該DLL正在被C#windows應用程序使用。如何在c DLL中使用assert

問題在於,當DLL中存在錯誤時,「斷言失敗」從不出現。該Dll是一個控制檯應用程序(不知道這是否相關)。有幾十個斷言,並且AFAIK沒有簡單的方法將錯誤mesg(或標誌)返回到C#應用程序而無需添加大量額外的代碼。

有沒有辦法強制assert輸出到屏幕?

+0

你有調試或發佈版本的DLL? – StuartLC

+0

兩者。我有源代碼,所以可以構建任何一個。 – PaeneInsula

回答

3

檢查C庫中的assert()宏的定義。它通常具有「可插拔」的輸出機制。最壞的情況下,你必須自己重寫assert()

這裏的底層問題是控制檯程序有輸出流:正常和錯誤。 System.Diagnostics.Process類具有StandardError屬性,可用於攔截寫入stderror流的消息。

1

請注意,定義NDEBUG會關閉assert機制。該標識符是在發佈版本(/ D選項)中默認定義的。檢查斷言是否在dll的調試版本中工作,如果是這樣,編輯您的發佈項目設置以刪除/ D選項或任何NDEBUG定義。

+0

該DLL是一個控制檯應用程序,由Windows C#應用程序調用。所有的控制檯輸出都會丟失。斷言正在受到打擊;那不是問題。問題是由於C#應用程序處於控制狀態,控制檯輸出從不顯示。 – PaeneInsula