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