2010-05-25 26 views
17

Cửa sổ nhật ký của tôi trong Eclipse chỉ hiển thị một vài dòng đầu tiên của StackTrace cho mỗi ngoại lệ. Điều này có nghĩa là tôi thường không thể nhìn thấy một ngoại lệ xảy ra. Có cách nào để thay đổi cài đặt này không?Cửa sổ Eclipse Logcat cắt các dấu vết ngăn xếp ngoại lệ

+0

Phiên bản SDK nào bạn đang sử dụng? Đó là một hành vi khá kỳ lạ ... bạn có thể vui lòng cung cấp một ví dụ về đầu ra cắt bỏ dấu vết ngăn xếp không? * Chỉnh sửa *: Tôi không thấy thẻ nhật thực, xin lỗi. Dù sao, nếu bạn sử dụng logcat gốc, tôi nghĩ bạn sẽ không gặp vấn đề gì: 'adb logcat' – Cristian

+0

Nếu bạn đang đề cập đến phần" ... thêm 12 dòng ... ", bạn chỉ thấy rằng đối với trường hợp ngoại lệ là nguyên nhân của một ngoại lệ khác. Nếu phần trên cùng của dấu vết ngăn xếp giống với phần khác, toàn bộ khung hình chỉ được hiển thị cho một trong số chúng và một khung còn lại được xử lý "...". (Bạn thực sự cần phải thêm chi tiết hơn cho câu hỏi của bạn - chúng tôi chỉ đoán những gì bạn muốn.) – fadden

+0

@Fadden: Bạn nói đúng - nó không cắt nó chút nào. Nếu bạn đăng nhận xét này làm câu trả lời, thì tôi sẽ chấp nhận nó. – Casebash

Trả lời

32

Nếu bạn đang đề cập đến phần "... thêm 12 dòng ...", bạn chỉ thấy rằng đối với trường hợp ngoại lệ là nguyên nhân của một ngoại lệ khác. Nếu phần trên cùng của dấu vết ngăn xếp giống với dấu vết trước đó, toàn bộ các khung hình chỉ được hiển thị cho ngoại lệ ngoài cùng, và các dấu vết khác nhận được điều trị "...".

Đặt một cách khác, đoạn của dấu vết không được hiển thị là bản sao của dấu vết xuất hiện sớm hơn trong chuỗi nguyên nhân ngoại lệ. Ví dụ: giả sử tôi có mã nơi phương thức main() gọi one(), gọi số two(), v.v. four() ném ngoại lệ. two() bắt và ném lại. Trường hợp ngoại lệ sẽ trông như thế này:

java.lang.RuntimeException: re-throw 
    at Foo.two(Foo.java:14) 
    at Foo.one(Foo.java:7) 
    at Foo.main(Foo.java:3) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: first 
    at Foo.four(Foo.java:23) 
    at Foo.three(Foo.java:19) 
    at Foo.two(Foo.java:12) 
    ... 3 more 

sự "do" ngoại lệ nói "... hơn 3" chứ không phải niêm yết rõ ràng one(), main(), và dalvik.system.NativeStart.main. Vì vậy, để có được dấu vết đầy đủ của ngoại lệ ban đầu, bạn sẽ bắt đầu bằng cách đọc dấu vết của nó, sau đó tiếp tục theo dõi ở trên.

Lưu ý không có sự chồng chéo - two() xuất hiện trong cả hai, nhưng trong "đầu tiên" theo dõi nó trên cuộc gọi đến three(), và trong "tái ném" theo dõi nó trên hướng dẫn throw.

+0

Vì vậy, giải pháp nếu ngoại lệ ban đầu là một trong những bạn muốn xem nhiều hơn 7 hoặc nhiều dòng? – George

+0

Tôi viết lại lời giải thích và thêm một ví dụ. – fadden

+1

Vâng, tôi đã không làm việc với Java "thực" trong một thời gian, nhưng tôi nên đã làm việc này bằng cách googling cho "Java stacktrace 12 nhiều hơn" hoặc một cái gì đó như thế. Như bạn chỉ ra, các đường được redacted ("12 more") là các dòng trùng lặp từ stacktrace ở trên. Tôi đã được ấn tượng rằng LogCat đã cắt tỉa các đường "hữu ích" của stacktrace, nhưng đó không phải là trường hợp. Cảm ơn bạn đã sửa chữa sự hiểu lầm của tôi. – George

-1

Nếu mã của bạn gọi phương thức tạo ra quá cao ngăn xếp, bạn có thể (và nên) xử lý ngoại lệ trong mã và đầu ra của bạn bất kỳ điều gì có liên quan đến nhật ký.

Nếu bạn không có xử lý ngoại lệ nào và thậm chí bạn không biết mã nào trong mã của bạn nên bạn đang đặt trình xử lý như vậy thì vấn đề là hoàn toàn ở nơi khác - bạn nên xử lý ngoại lệ tốt hơn một chút.

1

bạn có thể quá tải tất cả các phương thức đăng nhập (log.d, log.i, log.e, v.v.) với thông số (String tag, String msg, Throwable tr), trong đó tham số thứ ba là ngoại lệ. Điều này sẽ cung cấp cho bạn toàn bộ stacktrace trong logcat

http://developer.android.com/reference/android/util/Log.html

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