5

Tôi đang gặp APPCRASH từ ứng dụng C# của mình. Thời gian chạy cho một thông báo lỗi của "Ứng dụng này đã yêu cầu thời gian chạy để chấm dứt nó một cách bất thường". Sau đó, khi tôi nhấp OK tôi nhận được thông báo "Ứng dụng của tôi đã ngừng hoạt động" với các tùy chọn "kiểm tra trực tuyến cho giải pháp", "chương trình đóng" và "chương trình gỡ lỗi" thông thường. Khi tôi nhấp vào "chi tiết bổ sung", tôi nhận được chữ ký APPCRASH, với nhiều thông tin bổ sung. Một số của nó là con người có thể đọc được, một số của nó chỉ là số hex. "Mã ngoại lệ" là 40000015. Ngoài ra còn có dòng "Thông tin bổ sung". Câu hỏi của tôi là: có ai trong vũ trụ biết thông tin trong thông báo APPCRASH có nghĩa là gì không?Chi tiết của thông báo APPCRASH có ý nghĩa gì?

Dường như tin nhắn được đọc bởi người có thể thần thánh một nguyên nhân từ đó. Khi tìm kiếm câu trả lời, tôi thấy rất nhiều người đăng tin nhắn được định dạng chính xác như nhau. Thật không may, tôi đã không tìm thấy lời giải thích nào về ý nghĩa của thông tin này.

Ngoài ra, tôi đã thử tùy chọn "Chương trình gỡ lỗi", nhưng nó không hữu ích. Nó chỉ đặt tôi vào hệ thống dlls không có mã của tôi bất cứ nơi nào lên ngăn xếp cuộc gọi. Tôi đã điều tra và lỗi không xảy ra trong mã hệ thống này.

Thông báo APPCRASH có tên là dll khác là "Mô-đun lỗi" (mã này sử dụng nhiều dll bên ngoài) và lỗi nghiêm trọng có thể xảy ra ở đó. Nhưng thông tin đó không phải là rất hữu ích bởi vì tôi cần phải tìm nơi trong mã của tôi mà làm cho một cuộc gọi xấu đến dll bên ngoài (hoặc đặt nó ở trạng thái xấu). Đáng buồn thay, khi tôi nói "mã của tôi" tôi chỉ có nghĩa là mã mà tôi đang làm việc. Đó là một mật mã khổng lồ được viết bởi vài chục người trong một vài năm, vì vậy tôi không thể đoán được những nơi có thể làm cho cuộc gọi gây tử vong. Đó là lý do tại sao tôi hy vọng sẽ tiết lộ thêm thông tin từ tin nhắn APPCRASH. Đó cũng là lý do tại sao tôi rất keo kiệt với các chi tiết. Toàn bộ mọi thứ đều rất độc quyền với rất nhiều băng đỏ. Đó cũng là lý do tại sao tôi chưa đăng nội dung tin nhắn APPCRASH.

Để rõ ràng, tôi không yêu cầu bạn gỡ lỗi vấn đề của tôi cho tôi. Tôi không có cách nào đưa ra cho bạn một trường hợp có thể lặp lại của lỗi, và tôi không yêu cầu bất cứ ai cho tôi biết nguyên nhân của lỗi trong trường hợp cụ thể của tôi. Tôi chỉ muốn biết làm thế nào để giải thích những con số hex, và tôi đã không thể tìm thấy bất kỳ tài liệu.

+0

Mã ngoại lệ được sử dụng khi mã C hoặc C++ gốc gọi hàm abort(). Chúng tôi không thể giúp bạn tìm thấy nó nhưng rõ ràng nó nằm trong "dlls hệ thống" bạn đã bị mất trong. –

+0

Ngoại lệ không xảy ra trong mã hệ thống mà trình gỡ lỗi đưa tôi vào; nhưng nó có thể là một ngoại lệ xảy ra trong một dll bên ngoài khác nhau. Nếu điều này là từ một cuộc gọi abort(), sau đó nó chết một nơi nào đó trong đất không được quản lý. – user1646801

+1

Có vẻ như bạn đang gặp sự cố với mã không được quản lý. Để cô lập vấn đề, tôi sẽ cố gắng kiểm tra [DllImport] trong mã của bạn để thử giả lập, nhận xét điều này và xem bạn có ít vấn đề hơn không. Ý tưởng khác là nếu bạn có các thành phần bên thứ 3 có thể có các cuộc gọi không được quản lý sai. Cuối cùng, hãy thử để WinDBG và tìm kiếm vấn đề. WinDBG sẽ là tài nguyên cuối cùng của tôi, vì tôi không phải là chuyên gia và nó là một cách gỡ lỗi rất mạnh mẽ. –

Trả lời

1

Điều đó có nghĩa là bạn có một ngoại lệ không bị bỏ rơi và nó đang làm hỏng ứng dụng của bạn.

Nếu nó đang hoạt động ở chế độ gỡ lỗi, bạn cần phải xem xét những gì khác biệt về phiên bản phát hành. Tất cả các thư viện có hiện diện không? Bạn có thiết lập app.config không?

Kiểm tra trình xem sự kiện của bạn trong Nhật ký Windows -> Ứng dụng để biết thêm thông tin.

Nếu bạn thiết lập trình xử lý ngoại lệ, bạn sẽ nhận được thông tin tốt hơn nhiều, chẳng hạn như theo dõi ngăn xếp.

+0

Xin chào, cảm ơn bạn đã trả lời. Thật không may, tôi đã thử tất cả các thủ thuật thông thường và tôi đã không nhận được rất xa. Hiện đang chạy ở chế độ gỡ lỗi và chế độ này bị hỏng. Tôi có trình gỡ rối được đặt để phá vỡ các ngoại lệ chưa được xử lý và nó không bắt được bất kỳ lỗi nào. Thông tin trong trình xem sự kiện không chi tiết hơn thông báo lỗi ứng dụng. – user1646801

+0

@dmck - có một số ngoại lệ ass xấu (như ngoại lệ StackOverflowException hoặc OutOfMemory) làm hỏng trạng thái AppDomain, những ngoại lệ đó không thể được ghi/lưu vào bộ nhớ cache khi chúng xảy ra –

0

Bạn cần tạo một bản đổ vỡ có thể được phân tích sau sự kiện. Bạn sẽ cần thực hiện một số thay đổi đối với sổ đăng ký, và sau đó bạn có thể phân tích tệp kết xuất bằng Visual Studio. Hy vọng rằng, điều đó sẽ cung cấp cho bạn nhiều manh mối hơn như chức năng cụ thể bị lỗi.

Xem trang web này để biết chi tiết: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html

Bạn sẽ được thiết lập DebugDiag, một công cụ từ Microsoft.

Hãy cho tôi biết mọi thứ diễn ra như thế nào hoặc nếu bạn tìm thấy một số công cụ tốt hơn.

Kính trọng,

Dave

8

Dưới đây là một ví dụ về một thông báo ứng dụng sụp đổ:

Problem signature: 
Problem Event Name: APPCRASH 
Application Name: WINWORD.EXE 
Application Version: 12.0.4518.1014 
Application Timestamp: 45428028 
Fault Module Name: StackHash_7ae5 
Fault Module Version: 6.0.6000.16386 
Fault Module Timestamp: 4549bdc9 
Exception Code: c0000374 
Exception Offset: 000af1c9 
OS Version: 6.0.6000.2.0.0.256.4 
Locale ID: 1033 
Additional Information 1: 7ae5 
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de 
Additional Information 3: 333f 
Additional Information 4: 583336399425ab3efc33bdfbb60895ee 

tên ứng dụng và phiên bản ứng dụng là đơn giản, như là dấu thời gian (đây là ngày thay đổi trong File Explorer, được mã hóa dưới dạng giá trị dấu thời gian Unix 32 bit). Module lỗi thường là một tên dll, và bù trừ ngoại lệ là địa chỉ offset của lệnh phần cứng trong DLL gây ra lỗi. Trong trường hợp này, đó là lỗi thời gian chạy nội bộ mà không có mô-đun hợp lệ nào có thể được truy xuất, vì vậy chúng tôi có StackHash thay vì giá trị thực. Các phiên bản là các chuỗi phiên bản PE bình thường của các tệp thi hành trong Windows. ID ngôn ngữ là ngân hàng cài đặt toàn cầu hóa đang được sử dụng: 1033 là en-US.

Mã ngoại lệ có thể được hiểu là here. Trong ví dụ này, lỗi là STATUS_HEAP_CORRUPTION.

Trường thông tin bổ sung là dữ liệu mờ và dựa trên mã ngoại lệ. Tôi không biết bất kỳ thông tin hữu ích nào trên các trường đó, có khả năng không có bất kỳ trường hợp nào và có khả năng các trường đó là không có giấy tờ để Microsoft có thể thay đổi chúng khi cần thiết. Những trường đó thường là băm md5 của rất nhiều thông tin ... về cơ bản có rất nhiều thông tin có thể được so sánh với cùng một/khác nhau một cách nhanh chóng thông qua mã băm để bạn biết nếu lỗi đó là do cùng trạng thái thực thi như một .

0

Có một tính năng tuyệt vời trong .net, Managed Trợ Debugger, để khắc phục interoperations mã gốc và quản lý MSDN article about using it here

Exceptions ném bởi MDA có thể được cấu hình trong trường hợp ngoại lệ Visual Studio xem cửa sổ.

Các vấn đề liên quan