我的应用在没有调试器连接的设备上可以完美运行。然而,在Eclipse调试时出现了一个问题:
当主线程暂停大约10秒或更长时间(例如,在命中断点后),主线程会抛出一个SIGABRT,显然来自libc。
我能想到的唯一解释是:当未被轮询时,主线程上的消息队列会溢出来自另一个线程的消息。但是,当主线程暂停时,我看不到堆增长。此外,虽然我的应用程序在所有服务、内容提供者、广播接收器、http和地图工作线程等之间有约20个线程,但我真的想不出有任何过度消息的来源。
所以我的问题是:我该如何解决这个问题?我可以使用什么工具,如何找到导致我的应用程序在调试器中挂起时崩溃的原因?
编辑1:
logcat中唯一的内容是:
02-05 22:23:54.861: I/dalvikvm(26795): threadid=3: reacting to signal 3
02-05 22:23:54.901: D/dalvikvm(26795): threadid=1: still suspended after undo (sc=1 dc=1)
02-05 22:23:54.901: I/dalvikvm(26795): Wrote stack traces to '/data/anr/traces.txt'
02-05 22:23:58.905: A/libc(26795): Fatal signal 6 (SIGABRT) at 0x000002f5 (code=0), thread 26795 (om.myapp)
编辑 2:
进一步的调查让我相信这是 Android 故意杀死我的进程,因为它错误地认为 UI 线程已经挂起。问题并非出现在我的应用程序中。所以现在我的问题是:如何在调试时防止 Android 杀死我的进程?