2008-11-02 27 views
7

Ngắn của việc sử dụng hồ sơ, có cách nào bên trong chương trình đang chạy để phát hiện ngoại lệ cơ hội đầu tiên không? Lý tưởng nhất, tôi muốn ghi lại thông tin trạng thái chi tiết hơn mà không có sẵn khi khối catch đã thực hiện trên ngoại lệ cuối cùng.Có cách nào để đăng nhập hoặc chặn Ngoại lệ Cơ hội Đầu tiên

+0

Bạn mất thông tin gì? – pipTheGeek

+0

Vui lòng sửa lỗi: Nếu bạn không xử lý tất cả ngoại lệ trong mỗi phương thức và đảm bảo tất cả các biến được xác định bên ngoài khối try-catch thì tại thời điểm ngoại lệ cuối cùng được nâng lên, bạn sẽ không có quyền truy cập vào tất cả các biến đã có sẵn trong ngữ cảnh thực thi của ngoại lệ ban đầu. –

Trả lời

2

Tôi nghĩ cách duy nhất để bạn có thể lấy thông tin đó trong .NET là sử dụng Trình gỡ lỗi.

Nếu không, bạn sẽ phải tự mình phát triển giải pháp để lưu trạng thái của ngăn xếp và có cách đặc biệt để ghi lại ngoại lệ. Về cơ bản bạn sẽ làm những điều tương tự như một trình thông tin bộ nhớ, theo dõi các cá thể được tạo ra. Đây sẽ là một hit hiệu suất rất lớn mặc dù trừ khi bạn giới hạn số lượng thông tin bạn đang đăng nhập.

Giải pháp tốt hơn là sử dụng các khả năng Trace và Assert trong không gian tên System.Diagnostics để theo dõi có chọn lọc trạng thái chương trình hoặc sử dụng tiện ích ghi nhật ký (log4net, EnterpriseLibrary, NLog, cuộn đơn giản của riêng bạn) thread/stack/biến thông tin như bạn đi.

Trong mọi trường hợp, việc thêm tất cả thông tin bổ sung này là chi phí lớn.

EDIT: Tôi nhận được tin tức về dự án này trong nguồn cấp dữ liệu của tôi: NTrace. Có vẻ như nó sẽ phù hợp hơn một chút so với những gì bạn đang cố gắng làm.

1

Sử dụng Adplus. Nó sẽ đính kèm một trình gỡ lỗi vào proccess, và tạo (theo mặc định) một minidump nhỏ khi cơ hội đầu tiên excpetion được nâng lên. Tệp nhật ký do Adplus tạo cũng sẽ chứa thông tin ngoại lệ. Chỉ cần chắc chắn rằng bạn có PDB của aviable để xem thông tin calstack đầy đủ.

16

Tôi đã googling FirstChanceException, và tôi không thể cưỡng lại việc trả lời điều này hơn hai năm sau ...

Bây giờ, trong .net 4.0, bạn có thể bắt FirstChanceException event của AppDomain. Đó là một sự kiện duy nhất, vì vậy bạn không thể xử lý lỗi, nhưng nó có vẻ là một cách tốt, trung tâm để có được thông tin về ngoại lệ cho dù chúng được xử lý hay không. Sự kiện FirstChanceException được ném trước khi một khối catch được phép xử lý nó. Tôi đã không tìm thấy nhiều thông tin về nó, nhưng ngoài tài liệu microsoft, một trong những nguồn tốt hơn là Mitch Sellers Blog.

+0

Tôi ước có một cách để làm điều này trong .net 3.5. Tôi có một quá trình 3.5 trong sản xuất và một cái gì đó như 'FirstChanceException' trong 3,5 có thể giúp tôi theo dõi một vấn đề ngắt kết nối ... –

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