【问题标题】:Eclipse Logcat window cuts off exception stack tracesEclipse Logcat 窗口切断异常堆栈跟踪
【发布时间】:2010-05-25 03:17:25
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么 SDK 版本?这是一个非常奇怪的行为......您能否提供一个切断堆栈跟踪的输出示例? 编辑:我没有看到eclipse标签,抱歉。反正如果你用原版的logcat,我想你不会有问题的:adb logcat
  • 如果您指的是“...12 more lines...”部分,您只会看到导致另一个异常的异常。如果堆栈跟踪的顶部与另一个相同,则仅显示其中一个的完整帧集,而另一个则获得“...”处理。 (您确实需要为您的问题添加更多细节——我们只是在猜测您想要什么。)
  • @Fadden:你是对的——它根本没有切断它。如果您将此评论作为答案发布,那么我会接受。

标签: android eclipse logcat


【解决方案1】:

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

【讨论】:

  • 如果原始异常是您希望看到的超过 7 行左右的异常,那么解决方案是什么?
  • 我重写了解释并添加了一个例子。
  • 是的,我有一段时间没有使用“真正的”Java,但我应该通过谷歌搜索“Java stacktrace 12 more”或类似的东西来解决这个问题。正如您所指出的,已编辑(“12 更多”)行是上面堆栈跟踪中的重复行。我的印象是 LogCat 正在修剪堆栈跟踪的“有用”行,但事实并非如此。感谢您纠正我的误解。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 2014-05-15
      • 2017-08-06
      • 2010-09-13
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多