我在Eclipse中的logcat窗口只显示每个异常的StackTrace的前几行。这意味着我经常看不到发生异常的地方。有没有办法改变这个设置?
答案 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)
如果您的代码调用的方法产生的堆栈太高,您可以(并且应该)处理代码中的异常并输出与日志相关的任何内容。
如果您没有任何异常处理,并且您甚至不知道代码中的哪个位置应该放置这样的处理程序,那么问题完全在其他地方 - 您应该比这更好地处理异常。