2012-12-13 35 views
33

Tôi đang chạy ứng dụng của mình ở chế độ gỡ lỗi và tôi muốn tự ném một ngoại lệ (tức là không phải từ bên trong mã). Có cách nào để làm điều này không?Làm cách nào để buộc ngoại lệ trong khi gỡ lỗi trong Visual Studio?

Tất nhiên, chạy throw new Exception("My forced exception"); trong cửa sổ Lệnh hoặc Ngay lập tức không hoạt động.

EDIT: Tôi muốn ngoại lệ bị phát hiện bởi câu lệnh try-catch bao quanh mã tôi đang gỡ lỗi.

+0

Tôi đã trả lời dưới đây nhưng tò mò tại sao bạn đang cố gắng thực hiện việc này? – Belogix

+0

Tôi có mong muốn làm điều này vì tôi ở trong trạng thái phức tạp (xử lý một tệp văn bản lớn), và cú đánh đó có thể giúp tôi tìm ra lỗi thực sự nằm sâu trong chuỗi và cú đánh mà tôi đã đánh không có một "ném" khác trong đó – thepaulpage

Trả lời

39

Một cách có thể là ngắt dòng và tự thay đổi biến không có giá trị trong đường dẫn mã thành null ngay trước khi hoạt động xảy ra. Điều này sẽ gây ra một NullReferenceException để được ném.

+0

+1. Có các hành động "trạng thái thay đổi" tương tự khác (như thay đổi tên tệp, thay đổi văn bản thành không thể phân tích cú pháp, ...) cho phép mã tự kích hoạt ngoại lệ. Tôi không nghĩ rằng có một cách để thêm ngoại lệ mà sẽ không bao giờ được ném bởi mã (cũng được quan tâm để tìm hiểu nếu không). –

+0

Tôi nghĩ câu trả lời của tôi là sạch hơn vì bạn có thể gọi nó từ bất cứ đâu. Nếu không, bạn phải tiếp tục thêm mã ngay trước khi bạn quan tâm đến việc ném một ngoại lệ? – Belogix

+1

Nó cũng giả định rằng mã chủ đề sử dụng biến tham chiếu mà bạn có thể thay đổi. Điều gì sẽ xảy ra nếu phương pháp này sử dụng tất cả các biến giá trị? – RBarryYoung

-1

Cố gắng sử dụng cửa sổ ngay lập tức khi bạn đang ở điểm ngắt.

+2

Tôi đã thử điều này trước, nhưng nó không hoạt động: "Cụm từ biểu thức không hợp lệ 'ném'". –

+0

Điều gì về việc tạo ra một hàm gọi là ThrowMyException(). Sau đó gọi hàm đó qua cửa sổ ngay lập tức? – Jim

+0

Vui lòng cập nhật câu trả lời của bạn để bao gồm hướng dẫn đầy đủ về cách bạn sẽ sử dụng cửa sổ ngay lập tức để giải quyết vấn đề này. –

8

Bạn có thể thêm một phương pháp tương tự như:

public static void ThrowAnException(string message) 
{ 
    throw new ApplicationException(message); 
} 

Sau đó, sử dụng ngay cửa sổ , bạn có thể gọi ThrowAnException("Whoops")

+0

Ngoại lệ trong cửa sổ ngay lập tức không chuyển về trạng thái mã đang chạy, phải không? – RBarryYoung

+0

@RBarryYoung - Có, họ làm và sẽ dừng lại theo cách thông thường. Tôi vừa kiểm tra lại điều này bằng cách chạy mã của tôi trong một dự án ví dụ. – Belogix

+3

Tôi nghĩ rằng điều này đánh bại mục đích. Thêm mã này chỉ để có thể gỡ lỗi ngoại lệ có vẻ như là một ý tưởng tồi với tôi. Tôi thà thay đổi trạng thái và kích hoạt ngoại lệ theo cách đó. –

1

Nếu bạn đang chạy trong bối cảnh của một thử nghiệm đơn vị, và điểm mà bạn muốn ngoại lệ xuất phát là đằng sau một giao diện hoặc lớp được tiêm, bạn có thể tạo một đối tượng giả để ném ngoại lệ.

Lợi thế của việc này là, khi bạn đã hài lòng vì đã sao chép lỗi, bạn có thể tạo thử nghiệm đơn vị mới cho bộ hồi quy của mình.

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