我在Eclipse中的Logcat窗口只显示每个异常的前几行StackTrace,这意味着我经常看不到异常发生的位置。是否有任何方法可以更改此设置?
如果你指的是"...12 more lines..."部分,那么这只会出现在异常是其他异常的原因时。如果顶部的堆栈跟踪与早期的跟踪相同,则全套框架仅对最外层异常显示,而其他跟踪则会得到"..."处理。
换句话说,未显示的跟踪块是之前在异常原因链中出现过的一个跟踪的副本。例如,假设我有一段代码,其中方法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 more”,而不是明确列出one()
、main()
和dalvik.system.NativeStart.main
。因此,要获取初始异常的完整跟踪记录,您需要从其跟踪记录开始阅读,然后继续查看上方的跟踪记录。two()
在两者中都出现,但在“第一”跟踪记录中,它在调用three()
时,而在“重新抛出”跟踪记录中,它在throw
指令上。您可以使用(String tag, String msg, Throwable tr)
参数重载所有日志方法(log.d、log.i、log.e等),其中第三个参数是异常。这将在logcat中提供完整的堆栈跟踪信息。
http://developer.android.com/reference/android/util/Log.html
如果您的代码调用了一个产生了太多堆栈的方法,您可以(而且应该)在您的代码中处理异常,并输出与日志相关的内容。
如果您完全没有异常处理,甚至不知道在代码中应该放置这样的处理程序,那么问题完全在其他地方 - 您应该更好地处理异常。
adb logcat
。 - Cristian