2013-04-04 87 views
1

我有一個主要的應用程序(用C#)解析一個圖像數據庫,然後將這些圖像傳輸到C++ DLL中進行分析。現在由於某種原因,每200張圖片就會出現一個錯誤。它並不總是在相同的圖像上拋出錯誤,而只是在隨機圖像上(有時圖像通過分析,而另一次則拋出錯誤)。調試底層C++ DLL中的問題

可以以某種方式讓我的DLL向C#GUI拋出一個異常,並提供有關C++代碼中錯誤來自哪裏的信息?代碼本身應該運行良好,並且我無法找到錯誤來自哪裏,所以我需要DLL的一些幫助來至少確定它發生的位置。

任何幫助將不勝感激,我到目前爲止沒有發現任何。

+2

您是否有權訪問DLL的源代碼?如果不是,那麼不。 – 2013-04-04 20:57:41

+0

或者至少是符號文件。嘗試捕獲轉儲並通過WinDbg運行它 – 2013-04-04 20:58:39

+0

您是否可以在Visual Studio中啓用反彙編查看功能,以便在出現錯誤時調試C++ DLL? – 2013-04-04 20:58:59

回答

3

只需使用調試器來診斷。使用Project + Properties,Debug選項卡啓用非託管調試器,勾選「啓用非託管代碼調試」選項。

「它拋出一個錯誤」太模糊,無法給出具體的建議。但是您需要在Debug + Exceptions對話框中檢查Thrown複選框。根據拋出異常的類型,勾選「C++異常」和/或「Win32異常」。如果你不知道,然後勾選他們所有的人。

+0

不錯,工作完美! – SinisterMJ 2013-04-05 08:21:00

0

如果你調試的時候,在你的C++ DLL寫入到輸出,你是在功能上無法得到的錯誤。

舉例來說,如果你有FUNC1,FUNC2,FUNC3在DLL,然後每次進入和退出每個功能時都要寫出他們的名字。當你運行程序時,你將能夠將它縮小到導致異常的函數,然後你可以在函數的每一行後面添加類似的輸出來查找拋出異常的代碼。