2012-09-25 25 views
7

Tôi có thể ném một số văn bản trong ngăn xếp dấu vết không?Viết trong stacktrace

Đơn đăng ký của tôi đã có thông tin về các trường hợp ngoại lệ được ném. Nhưng muốn có thêm thông tin về một số phương thức (tham số).

Ý tưởng là để làm một cái gì đó giống như

StackTrace.Insert (0, "argument:" + test); 

Tôi biết điều này là không mát mẻ, nhưng là nó có thể?

+0

Điều này có đủ không? 'ném mới InvalidOperationException (" argument1: "+ test +", argument2: "+ test2);' –

+0

nhưng nó sẽ dừng phương pháp của tôi, phải không? –

+4

Có thể là giải pháp để tạo ngoại lệ và đặt các tham số trong [Thuộc tính dữ liệu từ điển] (http://msdn.microsoft.com/en-us/library/system.exception.data (v = vs.100) .aspx)? (Sau đó, ném ngoại lệ ...) – erikH

Trả lời

13

Tạo ngoại lệ và đặt thông số trong Data dictionary property. Sau đó ném ngoại lệ ...

+1

Làm cho nó một câu trả lời kể từ khi bình luận của tôi đã được bình chọn hữu ích, và tôi nghĩ rằng đó là nhiều hơn một câu trả lời hơn là một bình luận. – erikH

+0

Rất đẹp. Điều quan trọng là để ném ngoại lệ mới được tạo ra này nếu không StackTrace sẽ không được điền. – puddinman13

2

Theo định nghĩa, theo dõi ngăn xếp là đầu ra của các khung chồng đang hoạt động tại điểm thực hiện hiện tại trong một chương trình, thường được truy cập thông qua Ngoại lệ.

@David Yaw cung cấp cho bạn cách chính xác để thêm thông tin bổ sung vào theo dõi ngăn xếp, vì nó làm bong bóng ngăn xếp ngoại lệ. Để rephrase, bạn chỉ nên thêm dữ liệu tùy chỉnh của bạn vào dấu vết stack, khi nó là kết quả của một ngoại lệ.

Hoặc tạo một số bộ sưu tập Danh sách có thể truy cập tập trung để lưu trữ dữ liệu ghi nhật ký hoặc sử dụng thử/nắm bắt thích hợp với bong bóng ngoại lệ như David đã đề xuất. Ví dụ:

.

try 
{ 
    doSomethingThatMightFailAndThrowAnException(); 
} 
catch (Exception ex) 
{ 
    throw new Exception("Here is some custom data to add to the trace...",ex); 
    // Notice adding the ex as the second parameter preserves the original exception trace 
} 
5

Chỉ cần để thêm vào @ câu trả lời tuyệt vời erikH của:

Ngoài việc sử dụng các Data tài sản, nếu bạn cần thêm dữ liệu có sẵn lên chuỗi ngoại lệ, bạn có thể làm như vậy bằng phương pháp một ngoại lệ tùy chỉnh. Ngoài thông tin meta mà loại tùy chỉnh có thể cung cấp (CommunicationException có thể có nghĩa là sự cố với I/O, InvalidStateException có thể có nghĩa là chương trình đã gặp trạng thái không hợp lệ, v.v.) bạn có thể thêm thông tin bổ sung vào ngoại lệ trong hình thức của các lĩnh vực tùy chỉnh. Các trường tùy chỉnh đặc biệt hữu ích khi bạn cần loại an toàn mà thuộc tính Data không cung cấp.

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