2010-05-25 96 views
17

Eclipse中的我的logcat窗口仅显示每个异常的StackTrace的前几行。这意味着我经常看不到发生异常的地方。有什么方法可以改变这个设置吗?Eclipse Logcat窗口中断异常堆栈跟踪

+0

完整堆栈跟踪?这是一个相当奇怪的行为...你能提供一个输出示例来切断堆栈跟踪吗? *编辑*:我没有看到eclipse标签,对不起。无论如何,如果你使用原始的logcat,我认为你不会遇到任何问题:'adb logcat' – Cristian 2010-05-25 03:20:48

+0

如果你指的是“... 12 more lines ...”部分,你只能看到那些例外是另一个例外的原因。如果堆栈跟踪的顶部与另一个堆栈跟踪相同,则仅显示其中一个框架的完整框架集合,另一个框架将得到“...”处理。 (你真的需要在你的问题中增加更多细节 - 我们只是猜测你想要什么。) – fadden 2010-05-25 05:29:07

+0

@Fadden:你说得对 - 它根本不会切断它。如果您发表该评论作为答案,那么我会接受它。 – Casebash 2010-05-25 23:36:01

回答

32

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

换言之,未显示的跟踪块是在前面异常原因链中出现的跟踪的副本。例如,假设我有代码,其中方法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指令。

+0

那么如果最初的例外是你想要看到超过7行左右的那个,那么解决方案是什么? – George 2012-11-21 06:03:55

+0

我重写了解释并添加了一个示例。 – fadden 2012-11-27 18:35:38

+1

是的,我有一段时间没有用过“真正的”Java,但我应该通过搜索“Java stacktrace 12 more”或类似的东西来解决这个问题。正如你指出的那样,编辑的(“12多”)行是上面堆栈跟踪的重复行。我的印象是LogCat正在修剪堆栈跟踪的“有用”线条,但事实并非如此。谢谢你解决我的误解。 – George 2012-11-27 22:41:38

-1

如果你的代码调用了一个产生太大堆栈的方法,你可以(也应该)处理代码中的异常并输出与日志相关的任何东西。

如果你没有任何异常处理,你甚至不知道你的代码在哪里,如果你把这样的处理程序,那么问题完全在别处 - 你应该处理异常好一点。