2012-07-04 32 views
9

Khi ngoại lệ bị vô hiệu hóa trong ứng dụng .NET, máy ảo sẽ hiển thị thông báo lỗi cho người dùng. Tôi muốn có thể hiển thị thông báo lỗi của riêng tôi, mà không cần phải đặt một khối catch ở cấp cao nhất của ứng dụng của tôi (vì điều đó làm cho việc gỡ lỗi các trường hợp ngoại lệ không được chú ý nhiều hơn).Làm cách nào để ghi đè hộp thoại ngoại lệ chưa được xử lý mặc định?

Hiện tại, tôi hiển thị hộp thoại lỗi của chính mình trong trình nghe sự kiện AppDomain.UnhandledException, nhưng hộp thoại được tạo .NET vẫn hiển thị. Tôi cũng muốn tránh Environment.FailFast vì điều đó sẽ bỏ qua các khối finally của tôi (mà tôi vẫn còn phần đính kèm).

+0

Đó là một tính năng của JIT. Tôi không chắc rằng có một cách để sửa đổi nó ... –

+0

Tôi có thể tạo ra một chế độ sản xuất/chế độ phát triển biến cấu hình để chuyển đổi giữa xem hộp thoại của riêng bạn (và bắt) ở cấp cao nhất và không xem nó. Nó cũng là một ý tưởng tốt nói chung để gỡ lỗi ... –

+1

Nó là chắc chắn có thể, tôi nhớ Red Gate đã làm một cái gì đó trong lĩnh vực này. Xem [image] này (http://www.red-gate.com/products/dotnet-development/smartassembly/assets/images/error_reporting_dialog.png) và sản phẩm có liên quan [trang] (http: //www.red- gate.com/products/dotnet-development/smartassembly/learn-more/screenshots). Tôi không chắc chắn nếu họ có một phiên bản miễn phí, nhưng họ đã làm điều này, vì vậy phải có một cách! – oleksii

Trả lời

0

Làm thế nào về một mẫu tương tự trong WP7?

// Code to execute on Unhandled Exceptions 
    private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     // do stuff 
     if (System.Diagnostics.Debugger.IsAttached) 
     { 
      // An unhandled exception has occurred; break into the debugger 
      System.Diagnostics.Debugger.Break(); 
     } 
    } 
+0

Tôi không chắc cách điều này cho phép tôi hiển thị thông báo tùy chỉnh. – zneak

1

Windows Forms có một xử lý ngoại lệ được xây dựng-in mà theo mặc định bắt một ngoại lệ unhandled quản lý khi không có debugger được đính kèm, và các ngoại lệ xảy ra trong khi xử lý thông điệp cửa sổ, và jitDebugging = false trong App.Config. Sau đó, nó sẽ hiển thị hộp thoại cho người dùng cuối và ngăn chặn việc chấm dứt ứng dụng.

Bạn có thể thay đổi các thiết lập DbgJitDebugLaunchSetting registry dưới HKLM \ Software \ Microsoft \ .NetFramework. Điều này có một trong ba giá trị mà tôi biết:

  • 0: hiển thị hộp thoại người dùng yêu cầu "gỡ lỗi hoặc chấm dứt".
  • 1: cho phép ngoại lệ thông qua để CLR xử lý.
  • 2: khởi chạy trình gỡ lỗi được chỉ định trong DbgManagedDebugger khóa sổ đăng ký.

Trong Visual Studio, đi đến Tools> Options> Debugging> JIT để thiết lập phím này để 0 hoặc 2. Nhưng giá trị là 1 thường là những gì bạn muốn trên máy tính của một người dùng cuối

(Xem http://msdn.microsoft.com/en-us/library/2ac5yxx6(v=vs.90).aspx)

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