我正在使用遺留的C Dll(我有源代碼),這些C Dll通過程序分散了許多斷言。該DLL正在被C#windows應用程序使用。如何在c DLL中使用assert
問題在於,當DLL中存在錯誤時,「斷言失敗」從不出現。該Dll是一個控制檯應用程序(不知道這是否相關)。有幾十個斷言,並且AFAIK沒有簡單的方法將錯誤mesg(或標誌)返回到C#應用程序而無需添加大量額外的代碼。
有沒有辦法強制assert輸出到屏幕?
我正在使用遺留的C Dll(我有源代碼),這些C Dll通過程序分散了許多斷言。該DLL正在被C#windows應用程序使用。如何在c DLL中使用assert
問題在於,當DLL中存在錯誤時,「斷言失敗」從不出現。該Dll是一個控制檯應用程序(不知道這是否相關)。有幾十個斷言,並且AFAIK沒有簡單的方法將錯誤mesg(或標誌)返回到C#應用程序而無需添加大量額外的代碼。
有沒有辦法強制assert輸出到屏幕?
檢查C庫中的assert()
宏的定義。它通常具有「可插拔」的輸出機制。最壞的情況下,你必須自己重寫assert()
。
這裏的底層問題是控制檯程序有輸出流:正常和錯誤。 System.Diagnostics.Process
類具有StandardError
屬性,可用於攔截寫入stderror
流的消息。
請注意,定義NDEBUG會關閉assert機制。該標識符是在發佈版本(/ D選項)中默認定義的。檢查斷言是否在dll的調試版本中工作,如果是這樣,編輯您的發佈項目設置以刪除/ D選項或任何NDEBUG定義。
該DLL是一個控制檯應用程序,由Windows C#應用程序調用。所有的控制檯輸出都會丟失。斷言正在受到打擊;那不是問題。問題是由於C#應用程序處於控制狀態,控制檯輸出從不顯示。 – PaeneInsula
你有調試或發佈版本的DLL? – StuartLC
兩者。我有源代碼,所以可以構建任何一個。 – PaeneInsula