【发布时间】:2014-03-02 23:27:56
【问题描述】:
我有一个应用程序可以在没有附加调试器的设备上完美运行。但是,我在 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 在调试时杀死我的进程?
【问题讨论】:
-
你找到解决办法了吗?
-
目前还没有找到解决办法。
-
我的问题与线程有关,在错误的时间调用函数或递归调用本身(堆栈溢出)。改变这个可以解决问题。
-
@zyamys 你的问题解决了吗?我有同样的问题。如果你解决了,请告诉我。
-
@Maid786 同样的问题,你找到解决方法了吗?