2009-10-30 81 views
0

我目前正在嘗試使用我們的應用程序到達客戶端崩潰的底部。我將應用程序包裝在異常處理程序中,在發生崩潰時創建小型轉儲。C++調試異常c0000139

該應用程序崩潰,但有c0000139(其中沒有大量文檔)異常。

調用堆棧看起來像這樣

[email protected]() + 0x26 bytes 
[email protected]() + 0x26f48 bytes 
[email protected]() + 0xd9 bytes 
[email protected]() + 0x7a bytes  
[email protected]() + 0x2e bytes 
[email protected]() + 0x11d bytes 
[email protected]() - 0x265 bytes 
[email protected]() + 0x110 bytes 
[email protected]() + 0xc8 bytes 
[email protected]() + 0x29 bytes  
[email protected]() + 0x119f bytes 
[email protected]() + 0x1be bytes 
[email protected]() + 0x125 bytes 

它看起來像程序試圖創建(通過ODBC到Oracle)數據庫連接,不知何故未能要麼找到該DLL或找到一個DLL與錯入口點。

我想知道是否有人可以提供建議,如何進一步跟蹤這個問題,或者如果有人遇到這個問題,我會有興趣聽到你如何解決它。

在此先感謝

豐富

回答

0

該異常的代碼是沒有找到入口點 - 這是試圖加載DLL和DLL無法找到它所需要的所有DLL文件。

使用depends.exe來顯示DLL需要什麼。

+0

感謝您的答覆,但我怎麼找到源的dll?由於我沒有調用LoadLibrary,所以我不知道它會加載什麼。 – Rich 2009-10-30 12:32:53

+0

你試過了depend.exe嗎? – atomice 2009-10-30 12:38:03

+0

我不認爲Dependes.exe會幫助我,因爲DLL負載是由ODBC框架動態調用的。 – Rich 2009-10-30 13:27:39

0

啓用加載程序捕捉(gflags -i yourapp.exe + sls)並使其找到未能找到/加載的程序庫(在調試程序下啓動該程序將顯示所有加載程序診斷程序)。

或者,通過檢查LoadLibraryExW調用的參數,從崩潰轉儲中獲取庫的名稱。

+0

我無法重新創建我的機器上的崩潰。更糟糕的是,客戶機在哪裏發生故障是在紐約,而我在倫敦。該轉儲只會轉儲堆棧和內存,因爲它不是執行完整內存轉儲的選項。 – Rich 2009-10-30 14:25:28

+0

重新安裝oracle驅動程序?如果訪問受限,可能比調試更快。或者ODBC安裝是否有測試程序來查看它是否可以連接 – Mark 2009-10-30 15:25:03

+0

更糟糕的是,問題是間歇性的,這實際上並沒有幫助。它也在紐約的幾個用戶中。由於問題是間歇性的,我不確定重新安裝會有幫助。 ODBC加載程序試圖加載的Oracle驅動程序位於映射的網絡驅動器上。我能想到的唯一問題是驅動器映射可能失敗。但是,這只是猜測工作... – Rich 2009-10-30 16:13:47

0

感謝您的所有迴應。

原來(至少這似乎是問題),我們有配置問題。一半的軟件被設置爲加載9i驅動程序,一半的軟件期望10g驅動程序。

現在還很早,我們需要對此進行測試,但看起來很可能這是原因。

乾杯 豐富