2012-04-19 59 views
0

在開發Android應用程序時,我經常遇到發生異常但無法通過堆棧追蹤的情況,因爲在此類時刻顯示的堆棧僅提及系統方法,而不是我的任何代碼行。例如,如果我erroneusly一個不正確的字符串傳遞傳遞給Float.parseFloat,我得到了這樣的事情:在調試Android應用程序時在Eclipse中進行堆棧分析

Thread [<1> main] (Suspended) 
LoadedApk$ReceiverDispatcher$Args.run() line: 710 
ActivityThread$H(Handler).handleCallback(Message) line: 587 
ActivityThread$H(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3729  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 507 
ZygoteInit$MethodAndArgsCaller.run() line: 874 
ZygoteInit.main(String[]) line: 632 
NativeStart.main(String[]) line: not available [native method] 

這:

Thread [<1> main] (Suspended (exception RuntimeException)) 
LoadedApk$ReceiverDispatcher$Args.run() line: 722 
ActivityThread$H(Handler).handleCallback(Message) line: 587 
ActivityThread$H(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3729  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 507 
ZygoteInit$MethodAndArgsCaller.run() line: 874 
ZygoteInit.main(String[]) line: 632 
NativeStart.main(String[]) line: not available [native method] 

問題是 - 我怎麼能找出一條線的我代碼,這會導致問題?在不正確的parseFloat用法的情況下,我希望看到在堆棧中提到parseFloat和包含調用的方法。

+0

如果您將錯誤的參數傳遞給系統函數,堆棧跟蹤中的一行應該是您的調用,指向您的文件。 – 2012-04-19 16:48:00

+0

我有同樣的問題,你能解決嗎? – tnacho 2012-12-12 22:50:24

回答

1

在eclipse中的DDMS視圖中檢查Logcat。這將告訴你一個更好的堆棧跟蹤你的代碼中究竟錯誤是什麼,錯誤是什麼

例。我寫了不正當地使用Float.parseFloat像你說的,並得到以下錯誤在logcat的一個測試應用程序

04-19 12:56:55.929: E/AndroidRuntime(8532): FATAL EXCEPTION: main 
04-19 12:56:55.929: E/AndroidRuntime(8532): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testing/com.test.testing.TestingActivity}: java.lang.NumberFormatException 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.os.Looper.loop(Looper.java:130) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread.main(ActivityThread.java:3835) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at dalvik.system.NativeStart.main(Native Method) 
04-19 12:56:55.929: E/AndroidRuntime(8532): Caused by: java.lang.NumberFormatException 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at org.apache.harmony.luni.util.FloatingPointParser.parseFltImpl(Native Method) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:321) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at java.lang.Float.parseFloat(Float.java:323) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at com.test.testing.TestingActivity.onCreate(TestingActivity.java:15) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722) 
04-19 12:56:55.929: E/AndroidRuntime(8532):  ... 11 more 

我們看到的錯誤是由java.lang.NumberFormatException 造成的,然後向下鑽取我們看到它來自這裏:

at com.test.testing.TestingActivity.onCreate(TestingActivity.java:15) 

它指向我在第15行onCreate方法中的活動。如果我看第15行,我會看到 Float.parseFloat(「bacon」);並找到我的問題。 我們不能將培根解釋爲浮動(雖然這可能很好吃),所以它會拋出錯誤。

相關問題