Android “如何调试”;“深”;安卓系统崩溃?

Android “如何调试”;“深”;安卓系统崩溃?,android,Android,我一直在尝试调试一个没有Java堆栈跟踪的android崩溃。。。Java堆栈跟踪错误对我来说非常容易修复。。。但我遇到的这个bug似乎正在“NDK”内部崩溃,或者Android的深层内部被称为什么。。。顺便说一句,我没有对NDK做任何修改。。。我只是不知道那层叫什么,呵呵 无论如何,我主要是寻找关于深度调试方法的建议,而不是帮助解决这个特定问题。。。因为我怀疑我能发布所有涉及的源代码。。。所以我真的只需要知道如何在深层设置断点或者其他任何方法来追踪深层崩溃的源头。。。因此,我将简要描述这个bu

我一直在尝试调试一个没有Java堆栈跟踪的android崩溃。。。Java堆栈跟踪错误对我来说非常容易修复。。。但我遇到的这个bug似乎正在“NDK”内部崩溃,或者Android的深层内部被称为什么。。。顺便说一句,我没有对NDK做任何修改。。。我只是不知道那层叫什么,呵呵

无论如何,我主要是寻找关于深度调试方法的建议,而不是帮助解决这个特定问题。。。因为我怀疑我能发布所有涉及的源代码。。。所以我真的只需要知道如何在深层设置断点或者其他任何方法来追踪深层崩溃的源头。。。因此,我将简要描述这个bug,然后发布一个日志

我有一个包含7项活动的应用程序

Activity_INTRO
Activity_EULA
Activity_MAIN
Activity_Contact
Activity_News
Activity_Library
Activity_More
简介是一个发起人。。。它会在一些公司标识中褪色。。。在显示它们一段时间后,它会跳转到EULA活动。。。用户接受EULA后,它将跳转到主。。。MAIN然后创建一个TabHost,并用剩下的4个活动填充它

现在事情是这样的。。。当我点击TabHost的“更多”选项卡时,应用程序会暂停几秒钟,然后硬崩溃。。。并没有java堆栈跟踪,但实际的ASM级别跟踪,带有寄存器、IP和堆栈。。。无论我选择哪个选项卡,联系人、新闻、图书馆等等,都会发生同样的事情。。。它们都以同样的猛烈撞击而坠毁

但是,如果我将清单设置为在Activity_MAIN启动应用程序,绕过简介和EULA,则不会发生这些崩溃。。。所以有些东西在开幕式上挥之不去,在某种程度上影响了主办方的活动。。。我想知道那到底是什么。。。因为我在那些需要跳转的活动上使用finish()。。。事实上,我是这样做的,如果您看到任何bug,请告诉我:

从介绍跳到EULA时,我会:

//Display the EULA

Intent newIntent = new Intent (avi, Activity_EULA.class);

startActivity (newIntent);

finish();



and EULA to MAIN:

Intent newIntent = new Intent (this, Activity_Main.class);

startActivity (newIntent);

finish();
无论如何,这是硬崩溃日志。。。请让我知道,如果有什么方法,我可以反向工程或
/system/lib/libcutils.so
/system/lib/libandroid\u runtime.so
,因为我认为崩溃发生在其中一个。。。我认为它实际上发生在libandroid_运行时。。。。在日志上执行以下操作:

12-25 00:56:07.322: INFO/DEBUG(551): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

12-25 00:56:07.332: INFO/DEBUG(551): Build fingerprint: 'generic/sdk/generic/:1.5/CUPCAKE/150240:eng/test-keys'

12-25 00:56:07.362: INFO/DEBUG(551): pid: 722, tid: 723  >>> com.killerapps.chokes <<<

12-25 00:56:07.362: INFO/DEBUG(551): signal 11 (SIGSEGV), fault addr 00000004

12-25 00:56:07.362: INFO/DEBUG(551):  r0 00000004  r1 40021800  r2 00000004  r3 ad3296c5

12-25 00:56:07.372: INFO/DEBUG(551):  r4 00000000  r5 00000000  r6 ad342da5  r7 41039fb8

12-25 00:56:07.372: INFO/DEBUG(551):  r8 100ffcb0  r9 41039fb0  10 41e014a0  fp 00001071

12-25 00:56:07.382: INFO/DEBUG(551):  ip ad35b874  sp 100ffc98  lr ad3296cf  pc afb045a8  cpsr 00000010

12-25 00:56:07.552: INFO/DEBUG(551):          #00  pc 000045a8  /system/lib/libcutils.so

12-25 00:56:07.572: INFO/DEBUG(551):          #01  lr ad3296cf  /system/lib/libandroid_runtime.so

12-25 00:56:07.582: INFO/DEBUG(551): stack:

12-25 00:56:07.582: INFO/DEBUG(551):     100ffc58  00000000  

12-25 00:56:07.592: INFO/DEBUG(551):     100ffc5c  001c5278  [heap]

12-25 00:56:07.602: INFO/DEBUG(551):     100ffc60  000000da  

12-25 00:56:07.602: INFO/DEBUG(551):     100ffc64  0016c778  [heap]

12-25 00:56:07.602: INFO/DEBUG(551):     100ffc68  100ffcc8  

12-25 00:56:07.602: INFO/DEBUG(551):     100ffc6c  001c5278  [heap]

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc70  427d1ac0  

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc74  000000c1  

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc78  40021800  

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc7c  000000c2  

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc80  00000000  

12-25 00:56:07.612: INFO/DEBUG(551):     100ffc84  00000000  

12-25 00:56:07.622: INFO/DEBUG(551):     100ffc88  00000000  

12-25 00:56:07.622: INFO/DEBUG(551):     100ffc8c  00000000  

12-25 00:56:07.622: INFO/DEBUG(551):     100ffc90  df002777  

12-25 00:56:07.632: INFO/DEBUG(551):     100ffc94  e3a070ad  

12-25 00:56:07.632: INFO/DEBUG(551): #00 100ffc98  00000000  

12-25 00:56:07.632: INFO/DEBUG(551):     100ffc9c  ad3296cf  /system/lib/libandroid_runtime.so

12-25 00:56:07.632: INFO/DEBUG(551):     100ffca0  100ffcd0  

12-25 00:56:07.642: INFO/DEBUG(551):     100ffca4  ad342db5  /system/lib/libandroid_runtime.so

12-25 00:56:07.642: INFO/DEBUG(551):     100ffca8  410a79d0  

12-25 00:56:07.642: INFO/DEBUG(551):     100ffcac  ad00e3b8  /system/lib/libdvm.so

12-25 00:56:07.652: INFO/DEBUG(551):     100ffcb0  410a79d0  

12-25 00:56:07.652: INFO/DEBUG(551):     100ffcb4  0016bac0  [heap]

12-25 00:56:07.662: INFO/DEBUG(551):     100ffcb8  ad342da5  /system/lib/libandroid_runtime.so

12-25 00:56:07.662: INFO/DEBUG(551):     100ffcbc  40021800  

12-25 00:56:07.662: INFO/DEBUG(551):     100ffcc0  410a79d0  

12-25 00:56:07.662: INFO/DEBUG(551):     100ffcc4  afe39dd0  

12-25 00:56:07.662: INFO/DEBUG(551):     100ffcc8  100ffcd0  

12-25 00:56:07.662: INFO/DEBUG(551):     100ffccc  ad040a8d  /system/lib/libdvm.so

12-25 00:56:07.672: INFO/DEBUG(551):     100ffcd0  41039fb0  

12-25 00:56:07.672: INFO/DEBUG(551):     100ffcd4  420000f8  

12-25 00:56:07.672: INFO/DEBUG(551):     100ffcd8  ad342da5  /system/lib/libandroid_runtime.so

12-25 00:56:07.672: INFO/DEBUG(551):     100ffcdc  100ffd48  

12-25 00:56:07.852: DEBUG/dalvikvm(722): GC freed 367 objects / 15144 bytes in 210ms

12-25 00:56:08.081: DEBUG/InetAddress(722): www.akillerapp.com: 74.86.47.202 (family 2, proto 6)

12-25 00:56:08.242: DEBUG/dalvikvm(722): GC freed 62 objects / 2328 bytes in 122ms

12-25 00:56:08.771: DEBUG/dalvikvm(722): GC freed 245 objects / 11744 bytes in 179ms

12-25 00:56:09.131: INFO/ActivityManager(577): Process com.killerapps.chokes (pid 722) has died.

12-25 00:56:09.171: INFO/WindowManager(577): WIN DEATH: Window{43719320 
com.killerapps.chokes/com.killerapps.chokes.Activity_Main paused=false}

12-25 00:56:09.251: INFO/DEBUG(551): debuggerd committing suicide to free the zombie!

12-25 00:56:09.291: DEBUG/Zygote(553): Process 722 terminated by signal (11)

12-25 00:56:09.311: INFO/DEBUG(781): debuggerd: Jun 30 2009 17:00:51

12-25 00:56:09.331: WARN/InputManagerService(577): Got RemoteException sending 
setActive(false) notification to pid 722 uid 10020
12-25 00:56:07.322:信息/调试(551):***************************
12-25 00:56:07.332:INFO/DEBUG(551):构建指纹:“generic/sdk/generic/:1.5/CUPCAKE/150240:eng/testkeys”

12-25 00:56:07.362:INFO/DEBUG(551):pid:722,tid:723>>>com.killerapps.chokes该崩溃似乎来自Android固件。SDK开发人员不可能导致这些问题之一,因此这意味着Android或您的设备中存在缺陷

如果您可以创建一个可靠地再现此崩溃的测试项目,请打开一个问题并附加它,以及上面显示的核心转储跟踪和任何其他有用信息。通常情况下,我会说你应该先搜索b.android.com,但我不知道哪些跟踪信息足以确定你的崩溃之前是否有过报告

因为我在那些需要跳转的活动上使用finish()


我不是100%确定,但我非常确定,当您将控制权从一个活动传递到另一个活动时,不应该这样调用finish()。尝试删除对finish()的调用,看看这是否会使它变得更好。这可能不会导致您的错误,但至少值得一试。

似乎有4种排列方式:1)如果我从简介和EULA中删除finish(),则在以后的活动中不会再出现任何崩溃2)如果我从简介中删除finish(),但不从EULA中删除,则会出现“重置”,它通常会崩溃,它在介绍时重新启动。。。就像活动转换时屏幕快速切换一样,还有介绍3)如果我从EULA中删除finish(),但不是从INTRO中删除,则会出现“重置”,但这次是到EULA4)如果我不删除任何finish,那么。。。没有什么新的报告,因为这是我发布的原始代码状态。。。如果两个finish()调用仍然存在,它将崩溃。。。所以这很有趣,我似乎有第二感关于什么可能导致这个。。。因为在我所有的代码中,我只粘贴了对finish()的调用。。。但我还是不确定那些电话有什么问题。。。因为Android SDK页面这样描述它: