2013-02-19 9 views
9

chương trình Delphi của tôi chạy như dịch vụ NT và đã chạy tốt trong hơn 2 tháng và sau đó nó dừng lại đột ngột và tạo ra một đổ sụp đổ:Tôi phải làm gì khi chương trình của tôi bị lỗi với ngoại lệ 0xc0000005 tại địa chỉ 0?

Faulting tên ứng dụng: tca_shctisvc_ip.exe, phiên bản: 7.1.0.1843 , thời gian tem: 0x2a425e19 Faulting tên module: unknown, phiên bản: 0.0.0.0, thời gian tem: 0x00000000 ngoại lệ mã: 0xc0000005 lỗi offset: 0x00000000

không có địa chỉ thực để làm việc từ dựa trên thông tin trong trường hợp của Windows đăng nhập. Tôi đã có thể tải các bãi chứa nhỏ vào WinDbg và nó nói có một ngoại lệ nhưng thấy vấn đề với các khung stack. Một công cụ khác (Viewminidump) có thể hiển thị cho tôi các ngăn xếp của các luồng đang chạy.

Tôi bắt đầu giải quyết vấn đề này ở đâu?

Trả lời

24

Mã ngoại lệ 0xc0000005 là vi phạm truy cập. AV có lỗi bù trừ 0x00000000 có nghĩa là mã nào đó trong mã dịch vụ của bạn đang truy cập vào con trỏ nil. Bạn sẽ chỉ phải gỡ lỗi dịch vụ trong khi nó đang chạy để tìm hiểu những gì nó đang truy cập. Nếu bạn không thể chạy nó bên trong trình gỡ lỗi, thì ít nhất hãy cài đặt khung đăng nhập ngoại lệ của bên thứ ba, chẳng hạn như EurekaLog hoặc MadExcept, để tìm hiểu dịch vụ của bạn đang làm gì tại thời điểm AV.

+5

+1 để đề xuất trình ghi nhật ký ngoại lệ. Đó là công cụ gỡ lỗi hữu ích nhất số 1 mà tôi đã tìm thấy bên cạnh trình gỡ rối. –

0

Sự cố với khung ngăn xếp có thể biểu thị sự cố tham nhũng (một con thú thực sự khủng khiếp), tối ưu hóa hoặc trộn các khung như C/C++/C#/Delphi và các sự điên loạn khác - không có tiêu chuẩn tuyệt đối . (Một số ngôn ngữ thậm chí không có chúng!).

Vì vậy, tôi khuyên bạn nên hơi khó chịu với các vấn đề về ngăn xếp khung, bỏ qua nó và sau đó chỉ sử dụng câu trả lời của Remy.

0

tôi đã nhận được cùng một vấn đề với một ứng dụng khác nhau,

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 

Tôi đã sử dụng Các Enhanced Experience Giảm nhẹ Toolkit (Emet) từ Microsoft và tôi tìm thấy bằng cách vô hiệu hóa tính năng Emet trên javaw.exe trong tôi trường hợp vì đây là ứng dụng bị lỗi, nó cho phép ứng dụng của tôi chạy thành công. Đảm bảo bạn không có bất kỳ phần mềm tương tự nào có bảo vệ an ninh trên bộ nhớ.

+0

Có vẻ như Oracle đã sử dụng Delphi để xây dựng Java SE 8 JRE của họ;) – mjn