2011-11-01 39 views
6

Có cách nào để vô hiệu hóa ngoại lệ rất phiền toái của WPF khi gỡ lỗi không?Vô hiệu hoá gói ngoại lệ WPF để gỡ lỗi

Ví dụ sẽ là cửa sổ sở hữu hộp văn bản, hộp văn bản được liên kết với thuộc tính, trình thu thập trên thuộc tính đó sẽ ném ngoại lệ mà khung không thể xử lý (ném mới StackOverflowException() cho thí dụ).

Những gì tôi đang cần được nhìn thấy là

 get 
     { 
      throw new StackOverflowException(); // < Exception happened here 
     } 

Thay vì những gì tôi nhìn thấy được ...

No Source Available 
    Call Stack Location: 
    PresentationFramework.dll!MS.Internal.Data.PropertyPathWorker.RawValue(int k) + 0x64 bytes 

Do gói ngoại lệ WPF của ngoại lệ này cũng đôi khi bị bắt và sau đó cử hoặc là bị trì hoãn hoặc ẩn sâu trong MS.Internals và không thể quay trở lại trang web ngoại lệ thực tế. Điều này dẫn đến việc chúng ta nhìn thấy một callstack khổng lồ của PresentationFramework.dll, PresentationCore.dll, và WindowsBase.dll nhưng không có mã người dùng ngoại trừ App.Main().

Điều này xảy ra trong quá trình liên kết, các sự kiện được gọi trong quá trình tạo và các tình huống hoàn toàn ngẫu nhiên khác không có vần hoặc lý do (ngoại trừ khi nhấn nút đôi khi thực hiện điều này với tôi). Bây giờ có tôi có thể nhìn vào dấu vết ngăn xếp bên trong của ngoại lệ, nhưng dấu vết ngăn xếp cũng khá nhiều vô nghĩa bởi vì tôi không thể quay trở lại khung đó để xem các biến là gì tại thời điểm ném.

+0

+1. Tôi thấy điều này tất cả các thời gian - nếu constructor của cửa sổ của tôi ném một ngoại lệ, tôi phải đào sâu vào hai cấp độ của InnerExceptions để tìm ra những lỗi thực tế là gì. –

Trả lời

3

Nói chung khi gỡ lỗi tôi sẽ sử dụng gỡ lỗi -> ngoại lệ và chọn được ném cho Ngoại lệ thời gian chạy ngoại ngữ chung. Điều này sau đó sẽ dừng lại tại điểm ngoại lệ được ném.

Visual Studio 2010 Exceptions dialog with common language runtime exceptions ticked

+1

Trong khi giải pháp này làm việc nó không chính xác giải quyết vấn đề WPF cụ thể. Bây giờ tôi buộc phải nhìn thấy tất cả các trường hợp ngoại lệ ngay cả khi chúng bị bắt mà có thể là một cơn ác mộng thực sự nếu tôi đang sử dụng thư viện thứ 3 khác mà nội bộ ném và bắt cho ai biết lý do gì. Những gì tôi đang tìm kiếm là một cách để xem các trường hợp ngoại lệ không bị bắt buộc mà WPF đang bắt/khôi phục lại, gửi tới trình lắng nghe gỡ rối hoặc che khuất. – NtscCobalt

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