2009-05-06 17 views
20

ngắn gọn:Tôi có thể điều chỉnh studio trực quan "Break khi một ngoại lệ được ném" tùy chọn lập trình?

Trong Visual Studio 2008, Debug trình đơn có một tùy chọn Exceptions....
Khi nhấp vào đây, nó sẽ trả về hộp thoại "Phá vỡ khi một ngoại lệ được ném", trong đó tôi đánh dấu vào ô bên cạnh "Ngoại lệ thời gian chạy ngôn ngữ chung".

Tôi muốn có thể đánh dấu/bỏ chọn hộp này theo chương trình.

Lập:

Điều này làm cho debugger để phá vỡ khi bất kỳ ngoại lệ CLR được ném (không phải khi nó bị bắt và tái ném), vì vậy đây là rất tốt để gỡ rối.

Vấn đề là, nó bắt tất cả ngoại lệ CLR và khuôn khổ .NET xảy ra để ném và bắt một loạt các ngoại lệ trong nội bộ, cũng bị bắt. Điều này làm cho trình gỡ rối phá vỡ một loạt các ngoại lệ mà tôi thực sự không quan tâm vì chúng nằm bên trong khung công tác và không phải là vấn đề.
WCF là đặc biệt là xấu tại đây, và như tài sản có nó, ứng dụng của tôi sử dụng WCF khắp nơi.

Điều tôi muốn làm là tắt hộp kiểm và khi ứng dụng của tôi đã khởi động (và đã qua giai đoạn kết nối WCF và tất cả các ngoại lệ bên trong), sau đó bật, để bật tất cả ngoại lệ từ bây giờ là.

  • Tôi biết tôi không cần phải có bắt chăn trên "tất cả các trường hợp ngoại lệ clr", tuy nhiên danh sách các trường hợp ngoại lệ có thể có chiều dài khoảng 2 dặm và nó sẽ mãi mãi để di chuyển qua và chọn những người bạn muốn (và sau đó những gì nếu tôi bỏ lỡ một số).
+1

Bạn đã nghĩ đến việc chỉ đơn giản là thả một breakpoint trong mã của bạn và sau đó tự bật Exceptions? –

+0

Đó là những gì tôi đang làm. Nó rất mệt mỏi phải tự bật/tắt chúng mỗi khi tôi khởi động lại ứng dụng tuy nhiên, đó là những gì tôi đang cố gắng để tránh –

Trả lời

8

Điều này không trực tiếp giải quyết câu hỏi của bạn, nhưng có một hợp âm tiện dụng ctrl-D + E hiển thị hộp thoại ngoại lệ gỡ lỗi. Ctrl + Alt + E sẽ thực hiện tương tự.

1

Tắt đầu trang (do đó có thể vô nghĩa) bạn có thể đặt trình gỡ rối chỉ ngắt trên ngoại lệ CLR chưa được xử lý, sau đó tạo một đại biểu/sự kiện xử lý cho tất cả ngoại lệ trong mã init và nuốt các CLR (OK, OK, chỉ trong chế độ gỡ lỗi) và sau đó loại bỏ các đại biểu/sự kiện tại thời điểm trong mã nơi bạn muốn VS để bắt đầu vi phạm ngoại lệ CLR.

30

Bạn có thể bật/tắt chúng thông qua API tự động hóa của Visual Studio (được gọi là DTE). Hãy xem API Debugger3.ExceptionGroups. Ví dụ:

' Turn off NullArgumentException. 
Dim debugger As Debugger3 = DTE.Debugger 
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions") 
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException") 

Vì vậy, bạn có thể dễ dàng viết macro để bật/tắt ngoại lệ cụ thể. Để gọi macro từ ứng dụng của bạn, bạn có thể khởi chạy "devenv/command".

Ngoài ra, bạn có thể sử dụng DTE từ ngoài proc và tự động hóa Visual Studio trực tiếp (không có macro liên quan).

Thông tin thêm:

  1. Customizing exception handling in the VS Debugger
  2. Debugger3.ExceptionGroups
  3. devenv /command
  4. How to: Get References to the DTE and DTE2 Objects
+0

Cool, bây giờ tôi có thể làm điều đó quá! – leppie

1

Bạn có thể làm điều này bằng cách tạo một macro (như trong Michael Lehenbauer 's chẳng hạn) và sau đó định cấu hình lại điểm ngắt của bạn thành chạy macro và tiếp tục thực hiện. Bạn có thể làm tương tự ở cuối phần mã mà bạn quan tâm để vô hiệu hóa tùy chọn một lần nữa hoặc vô hiệu hóa nó theo cách thủ công giữa các phiên gỡ lỗi.

0

Ngoài ra còn có

if (Debugger.IsAttached) {Debugger.Break()}

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