2010-02-04 30 views
5

Tôi biết tôi đang mở bản thân mình bằng cách yêu cầu điều này, nhưng tôi nghĩ tôi sẽ xem liệu StackOverflow có bất kỳ giải pháp nào cho vấn đề mà tôi gặp phải không ...Xử lý các ứng dụng thô lỗ trong .NET

Tôi có một ứng dụng C# không hoạt động tại một trang web của khách hàng theo cách mà tôi không thể tái tạo tại địa phương. Thật không may, nó là rất khó (không thể) đối với tôi để có được bất kỳ thông tin mà ở tất cả giúp trong việc cô lập nguồn gốc của vấn đề.

Tôi có sẵn một khuôn khổ giám sát lỗi khá rộng mà đang theo dõi cho trường hợp ngoại lệ unhandled trong tất cả các vị trí thông thường:

  • quay ngược xử lý ngoại lệ trong đề kiểm soát
  • Application.ThreadException cho WinForms ngoại lệ
  • AppDomain.CurrentDomain.UnhandledException

Bản ghi chi tiết thông tin ở nơi tôi có quyền truy cập vào chúng.

Điều này đã rất hữu ích trong quá khứ để xác định các vấn đề trong mã sản xuất, nhưng đã không cho tôi bất kỳ thông tin nào về chuỗi sự cố hiện tại. Dự đoán tốt nhất của tôi là vấn đề cốt lõi là một trong những loại ngoại lệ "thô lỗ" (hủy bỏ chủ đề, hết bộ nhớ, tràn ngăn xếp, vi phạm truy cập, v.v.) đang leo thang đến một sự tắt máy thô lỗ đang rớt xuống quá trình trước khi tôi có cơ hội để xem những gì đang diễn ra.

Có bất kỳ điều gì mà tôi có thể thực hiện để chụp nhanh thông tin khi quy trình của tôi gặp sự cố sẽ hữu ích không? Lý tưởng nhất, tôi sẽ có thể viết ra định dạng đăng nhập tùy chỉnh của tôi, nhưng tôi sẽ rất vui nếu tôi có thể có một cách đáng tin cậy để đảm bảo rằng một bãi chứa sự cố được viết ở đâu đó. Tôi đã hy vọng rằng tôi có thể thực hiện lớp bắt nguồn từ CriticalFinalizerObject và có nó nhổ một lỗi cơ hội cuối cùng đăng xuất khi nó được xử lý, nhưng điều đó dường như không được kích hoạt trong kịch bản StackOverflow mà tôi đã thử nghiệm.

Tôi không thể sử dụng Báo cáo lỗi và bạn bè của Windows do thiếu chứng chỉ ký mã.

Tôi không cố gắng "phục hồi" từ các ngoại lệ tùy ý, tôi chỉ đang cố gắng ghi lại những gì đã xảy ra trên đường xuống.

Bất kỳ ý tưởng nào?

+2

Đó là một tốt câu hỏi. Ngọn lửa chủ yếu hướng đến mã 'try-catch-pretend-it's-OK'. Việc tắt và báo cáo lỗi một cách duyên dáng là lý do hoàn toàn có thể chấp nhận để đăng ký các trình xử lý ngoại lệ toàn cục. – Aaronaught

Trả lời

1

Bạn có thể thử tạo một tệp minidump. Đây là một API C++, nhưng có thể viết một chương trình C++ nhỏ để khởi động ứng dụng của bạn giữ một xử lý cho tiến trình, chờ xử lý tiến trình, và sau đó sử dụng trình xử lý để tạo một minidump khi ứng dụng chết.

1

Nếu bạn đã làm những gì bạn yêu cầu:

  • try-catch về việc áp dụng.Chạy
  • Unhandled miền Exceptions
  • Unhandled Exceptions Chủ đề
  • Cố gắng xử lý Catch trong tất cả các chủ đề

Sau đó, bạn sẽ bắt gặp những ngoại lệ trừ lẽ nếu nó đang được ném bởi một bên thứ ba hoặc COM thành phần.

Bạn chắc chắn chưa cung cấp đủ thông tin.

  • Khách hàng nói gì sẽ dẫn đến ngoại lệ?
  • Bạn sử dụng thành phần COM hoặc bên thứ ba nào? (Bạn đúng thể hiện và tham khảo các thành phần này? Bạn có vượt qua các đối số hợp lệ cho các cuộc gọi hàm COM không?)
  • Bạn có sử dụng bất kỳ mã không được quản lý - không an toàn nào không?
  • Bạn có tích cực rằng bạn có tất cả các cuộc gọi có khả năng ném được bao trả bằng try-catch không?

Tôi chỉ nói rằng không ai có thể cung cấp cho bạn lời khuyên hữu ích trừ khi bạn đăng nhiều thông tin hơn và thậm chí tại đó chúng tôi có thể chỉ suy đoán về nguồn gốc của bạn.

Có bộ mắt mới nhìn vào mã của bạn.

Một số lỗi không thể bị phát hiện bằng cách ghi nhật ký.

Xem câu hỏi tương tự này để biết thêm chi tiết:

StackOverflowException in .NET

Dưới đây là một liên kết để giải thích trường hợp ngoại lệ không đồng bộ (và tại sao bạn không thể phục hồi từ họ):

http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=c1898a31-a0aa-40af-871c-7847d98f1641

+0

Có một bộ ngoại lệ ma thuật không thể bị mã được quản lý phát hiện. (như StackOverflowException). Mã này: using System; lớp c { khoảng trống tĩnh Main() { thử {f(); } bắt (Ngoại lệ cũ) {Console.WriteLine (ví dụ); } } void tĩnh f() {f();} } sẽ không bắt được tràn ngăn xếp, nhưng ứng dụng sẽ chỉ chấm dứt. – StarBright

+0

@StarBright - Yup, đó là lý do tại sao bạn cần xem lại mã của mình hoặc tốt nhất là nên nhờ người khác xem xét mã. –

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