Android:USB断开导致应用程序崩溃

时间:2014-01-23 22:11:35

标签: android usb stack-trace bugsense

有点像菜鸟问题,但在分析堆栈跟踪时我是否正确假设堆栈跟踪中的第一个或最顶层的项目是最新的? 在我的情况下,'performDestroyActivity'是原因还是崩溃的结果?

调试崩溃原因的后续步骤应该是什么?

这是我的BugSense报告

java.lang.RuntimeException: Unable to destroy activity {ca.foo.awesomeapp/ca.foo.awesomeapp.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3497)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3515)
at android.app.ActivityThread.access$1400(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1249)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException
at com.wiley.wroxaccessories.WroxAccessory.disconnect(WroxAccessory.java:79)
at ca.foo.awesomeapp.MainActivity.onDestroy(MainActivity.java:179)
at android.app.Activity.performDestroy(Activity.java:5403)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1117)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3484)
... 11 more

1 个答案:

答案 0 :(得分:0)

首先,logcat将行附加到文件的底部。所以最底层的堆栈跟踪是最新的。最顶端是第一个发生(最近发生的是“最近的”)。

要分析堆栈跟踪,基本上首先阅读每一行,直到您从应用程序中看到一个对象。在堆栈跟踪中,带有应用信息的最上面的行是崩溃的“根”原因,而您的应用可能包含由您的行(或继承的方法行)代码继承或调用的对象。

在你的情况下,这是你的罪魁祸首:

at ca.foo.awesomeapp.MainActivity.onDestroy(MainActivity.java:179)

那应该告诉你,在“onDestroy”方法中的“MainActivity”的第179行,你正在调用导致空指针异常的东西。它上面的直线告诉你在它命中代码之前它发生了什么 - “WroxAccessory” - 它似乎有一个空对象,它就是它停止的地方。否则,您会看到有关此行的更多行:

at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException

这是持有你的应用程序的主要“looper”。所以上面通常没有用(因为它不太可能是那里的错误,但是代码也在运行并执行你的代码,因此它是跟踪的一部分)。