如何在Android中调试“深度”崩溃?

时间:2010-12-31 11:00:05

标签: android

我一直在尝试调试没有Java Stack Trace的情况下发生的机器人崩溃... Java Stack Trace错误很容易让我修复......但是我得到的这个bug似乎在崩溃里面“NDK”或其他什么东西都被称为Android ...我没有修改NDK顺便说一句......我只是不知道还有什么叫那层嘿嘿。

无论如何,我主要是寻求有关深度调试方法的建议,而不是帮助解决这个特定的问题...因为我怀疑我可以发布涉及的所有源代码...所以我真的需要知道如何在深层设置断点或其他任何方法来跟踪深度崩溃到它们的源...所以我将简要描述该bug,然后发布一个LogCat。

我有7个活动的应用

Activity_INTRO
Activity_EULA
Activity_MAIN
Activity_Contact
Activity_News
Activity_Library
Activity_More

INTRO是初始的...它在一些公司徽标中消失...在显示它们一段时间之后它跳转到EULA活动...在用户接受EULA之后,它跳转到MAIN ... MAIN然后创建一个TabHost并用剩余的4个活动填充它

现在发生了事情...当我点击说TabHost的更多选项卡时,应用程序暂停几秒然后硬崩溃......没有Java堆栈跟踪,但是实际的ASM级别跟踪寄存器和IP和堆栈...无论我选择哪个选项卡,联系人,新闻,图书馆,更多......同样的事情都会发生...所有这些都崩溃了同样的硬崩溃

但是,如果我将清单设置为在Activity_MAIN上启动应用程序,绕过INTRO和EULA,那么这些崩溃就不会发生......所以某些东西从那些以某种方式冲刷TabHost'ed活动的开放活动中挥之不去。我想知道到底是怎么回事......因为当他们需要跳的时候我会在那些活动上使用finish()...事实上这就是我在做的事情让我知道如果你看到了任何错误:

从INTRO跳到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_runtime.so,因为我认为崩溃发生在其中一个......我认为它实际上发生在libandroid_runtime中......反正在日志中:

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

2 个答案:

答案 0 :(得分:4)

该崩溃似乎来自Android固件。 SDK开发人员不应该导致其中一个,因此这意味着Android或您的设备中存在错误。

如果您可以创建可靠地重现此崩溃的测试项目,请在http://b.android.com上打开一个问题并附上它,以及上面显示的核心转储跟踪和任何其他有用信息。通常,我会说你应该首先搜索b.android.com,但我不知道跟踪的哪些部分足够独特,以确定你的崩溃是否已经报告过。

答案 1 :(得分:0)

  

因为当他们需要跳跃时我会在那些活动上使用finish()...

我不是百分百肯定,但是我很确定当你将控制从一个活动传递到另一个活动时,你不应该像这样调用finish()。尝试删除对finish()的调用,看看是否能让它变得更好。这可能不会导致你的错误,但它至少值得一试。