Eclipse Logcat窗口会切断异常堆栈跟踪

时间:2010-05-25 03:17:26

标签: android eclipse logcat

我在Eclipse中的logcat窗口只显示每个异常的StackTrace的前几行。这意味着我经常看不到发生异常的地方。有没有办法改变这个设置?

3 个答案:

答案 0 :(得分:32)

如果您指的是“......多12行...”部分,您只会看到导致另一个异常的异常。如果堆栈跟踪的顶部与早期跟踪相同,则仅显示最外层异常的完整帧集,其他跟踪将获得“...”处理。

换句话说,未显示的跟踪块是异常原因链中较早出现的跟踪的副本。例如,假设我有方法main()调用one()的代码,调用two(),依此类推。 four()抛出异常。 two()抓住它并重新抛出它。例外情况如下:

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

“由...引起”例外说“另外3个”而不是明确列出one()main()dalvik.system.NativeStart.main。因此,要获得初始异常的完整跟踪,首先要读取其跟踪,然后继续上面的跟踪。

注意没有重叠 - two()出现在两者中,但是在“第一”跟踪中它出现在对three()的调用上,而在“重新抛出”跟踪中它出现在throw上{1}}指示。

答案 1 :(得分:1)

您可以使用(String tag, String msg, Throwable tr)参数重载所有日志方法(log.d,log.i,log.e等),其中第三个参数是异常。这将为您提供logcat中的完整堆栈跟踪

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

答案 2 :(得分:-1)

如果您的代码调用的方法产生的堆栈太高,您可以(并且应该)处理代码中的异常并输出与日志相关的任何内容。

如果您没有任何异常处理,并且您甚至不知道代码中的哪个位置应该放置这样的处理程序,那么问题完全在其他地方 - 您应该比这更好地处理异常。