17

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

4

3 回答 3

32

如果您指的是“...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指令上。

于 2010-05-26T17:39:59.493 回答
1

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

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

于 2012-11-27T17:34:30.573 回答
-1

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

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

于 2012-11-27T16:57:29.140 回答