Eclipse Android Debugger – 我的程式碼在哪裡引起異常?
誠然,我的問題基本上與這個問題是一樣的,但似乎還沒有答案:
ofollow,noindex" target="_blank">NullPointerException in handleStopActivity — No reference to my code in stack trace
在最近一週內下載的Eclipse Helios,Android開發工具外掛和JDK.我正在使用我的裝置上的一個應用程式,在Debug模式下執行它,並且意外終止了.我意識到我造成了一個NullPointerException,問題本身並不是一個很長的問題.
但是,問題是,偵錯程式似乎無法識別程式碼中丟擲異常的位置.堆疊跟蹤不引用我的程式碼.
實際上,如果我將以下內容放在OnCreate()方法中,我也遇到同樣的問題
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //lI("onCreate()");//A silly logging thing I messed around with Integer iDareYou = null; iDareYou.byteValue();
很大程度上,Eclipse肯定警告我,程式碼可能會在我的臉上炸燬.但是當我實際在我的裝置上執行它時,返回的堆疊跟蹤如下:
Thread [<1> main] (Suspended (exception RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2787 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2803 ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 135 ActivityThread$H.handleMessage(Message) line: 2136 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 144 ActivityThread.main(String[]) line: 4937 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 868 ZygoteInit.main(String[]) line: 626 NativeStart.main(String[]) line: not available [native method]
我搜索了一些答案,不幸的是,我可以想出的是“為什麼我的Android應用程式導致NullPointerException”的問題?品種.
我希望找到我應該做的不同,以便能夠找到我的程式碼中引起異常的一點.因為我確信這個能力會在某些時候派上用場未來!
進行編輯以新增一些資訊.作為下面提到的第一個評論,偵錯程式暫停執行緒的狀態不是應用程式的“最終”狀態.按下“恢復”幾次將流程沿著流程實際終止,儘管不幸的是Eclipse / ADT Debug視窗中沒有顯示有用的堆疊跟蹤.然而,此時我貼上的堆疊跟蹤跟隨在我的程式碼中NPE的堆疊跟蹤的前3個唯一行輸出到LogCat.以前我曾經看過LogCat是否有任何可以使用的東西,但很可能是在偵錯程式中按“恢復”之前,將程序轉移到這個狀態.不幸的是,這樣做不會在實際偵錯程式的程式碼中顯示NPE的堆疊跟蹤.
但是訊息並非如此糟糕 – 從右側的“變數”視窗中的資訊可以看出,執行緒當前的範圍內有一個NPE,所以至少可以給出一個NPE正在進行的線索(當然還有LogCat).
所以基於不同主題的建議,我發現最好的工作是為NullPointerException新增一個“捕獲和未捕獲”斷點.當我這樣做並重新啟動時,偵錯程式在我的程式碼中顯示NPE的堆疊跟蹤,並將編輯視窗直接移動到引導NPE的行.
目前我相信這是因為NPE被Android框架所捕獲(可能再次被丟擲).似乎原來的困境是由於Eclipse / ADT / DalvikVM除錯堆疊跟蹤視窗不包含“由…引起的”資訊(據我所知),這是在logcat的.我會進一步調查這是否可以補救:)
我很欣賞Bert F的建議,因為我並不完全知道執行緒尚未處於“最終”狀態.雖然在LogCat中堆疊跟蹤是[稍後]顯示的,但是我沒有在LogCat中錯過它,因為它還沒有,但我錯過的是“恢復”,這將導致堆疊跟蹤在LogCat中輸出.
儘管我最初讓偵錯程式在我的程式碼中使用斷點停止,但是在恢復執行緒之後,我可以最終在LogCat中最終獲得堆疊跟蹤,這樣就有效地解決了這個問題.我唯一可以要求的其他事情是讓偵錯程式停在我的程式碼行中,導致異常,而不是被抓到,後來被Android框架重新丟擲.但是我相信這將是一個不同的問題:) Eclipse如果點選在LogCat視窗中顯示的堆疊跟蹤中的相應行,那麼它將會發送給我.
我運行了你的確切程式碼,LogCat給了我以下例外:
Caused by: java.lang.NullPointerException at mypackage.test.TestActivity.onCreate(TestActivity.java:23)
當然是這樣的
iDareYou.byteValue();
宣告.這是明亮的一天!
我建議你必須學會如何正確地使用ping/tools/ddms.html" rel="nofollow,noindex" target="_blank">Dalvik Debug Monitor Server .
你釋出的日誌似乎沒用,你是否搞砸了一些LogCat過濾器(發生在我一次)?
OFFTOPIC:“我的程式碼在哪裡引起異常?” – 我認為你的問題沒有制定好.
我認為這個問題的正確名稱可能是 – “如何使用Android偵錯程式和LogCat?有些例外沒有正確記錄!
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/4892547/eclipse-android-debugger-where-in-my-code-did-i-cause-the-exception