2010-05-25 54 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

如果你的代碼調用了一個產生太大堆棧的方法,你可以(也應該)處理代碼中的異常並輸出與日誌相關的任何東西。

如果你沒有任何異常處理,你甚至不知道你的代碼在哪裏,如果你把這樣的處理程序,那麼問題完全在別處 - 你應該處理異常好一點。