我有一个应用程序在没有附加调试器的设备上运行得非常好。但是,在Eclipse中调试时遇到问题:Android应用程序与SIGABRT Signal 6仅在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在调试时杀死我的进程?
你找到任何解决这个? – WindRider
到目前为止我还没有找到解决办法。 – zyamys
我的问题与线程有关,在错误的时间调用函数或递归调用本身(堆栈溢出)。改变这个可以解决问题。 – Codebeat