2013-02-19 147 views
9

我的Delphi程序運行作爲NT服務,並已爲超過2個月運行良好,然後突然停止並生成崩潰轉儲:當我的程序在地址0處發生異常0xc0000005時崩潰,該怎麼辦?

錯誤的應用程序名稱:tca_shctisvc_ip.exe,版本:7.1.0.1843 ,時間戳:0x2a425e19錯誤模塊名稱:未知,版本:0.0.0.0,時間戳:00000000異常代碼:0000005故障偏移量:00000000

目前還沒有真正的地址,基於Windows事件的信息從工作登錄。我能夠將微型轉儲加載到WinDbg中,並表示存在異常,但發現堆棧幀存在問題。一個不同的工具(Viewminidump)能夠向我展示正在運行的線程的堆棧。

我從哪裏開始解決這個問題?

回答

24

異常代碼0xc0000005是一個訪問衝突。一個錯誤的AV錯誤抵消0x00000000意味着你的服務代碼中的某個東西正在訪問一個nil指針。您只需在運行時調試該服務以瞭解它正在訪問的內容。如果您無法在調試器中運行它,那麼至少應安裝第三方異常記錄器框架(例如EurekaLogMadExcept),以瞭解在AV時您的服務正在做什麼。

+5

+1用於提示異常記錄器。這是除調試器本身之外我發現的#1最有用的調試工具。 – 2013-02-19 06:43:40

0

堆棧幀的問題可能表明堆棧損壞(真正可怕的野獸),優化或混合框架,如C/C++/C#/ Delphi和其他瘋狂 - 因爲堆棧框架沒有絕對的標準。 (有些語言甚至沒有它們!)。

所以,我建議稍微惱火堆棧框架問題,忽略它,然後只使用雷米的答案。

0

我得到了同樣的問題有不同的應用,

Faulting application name: javaw.exe, version: 8.0.51.16, time stamp: 0x55763d32 
Faulting module name: mscorwks.dll, version: 2.0.50727.5485, time stamp: 0x53a11d6c 
Exception code: 0xc0000005 
Fault offset: 0x0000000000501090 
Faulting process id: 0x2960 
Faulting application start time: 0x01d0c39a93c695f2 
Faulting application path: C:\Program Files\Java\jre1.8.0_51\bin\javaw.exe 
Faulting module path:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll 

我用的是增強的緩解體驗工具包(EMET),微軟,我發現通過禁用EMET在javaw.exe的功能我因爲這是錯誤的應用程序,它使我的應用程序能夠成功運行。確保你沒有任何類似的軟件在內存上具有安全保護。

+0

看起來Oracle使用Delphi來構建他們的Java SE 8 JRE;) – mjn 2015-07-21 12:59:34

相關問題