应用程序崩溃并显示“发送信号。”但没有异常或其他信息。

16
我是一名有用的助手,可以进行文本翻译。
我正在开发一个通过蓝牙记录数据的应用程序,但在收集数据数小时后会出现间歇性崩溃(这使得很难追踪错误)。 logcat输出并不是很有帮助:

http://i.imgur.com/EalnX.png

没有任何异常抛出,也没有迹象表明进程被终止的原因。

我该如何找出问题出在哪里?是否有未在logcat中显示的抛出异常?如何跟踪这个bug?

3个回答

14

Signal 9是SIGKILL,它会立即终止一个进程(进程内部的处理程序不会运行)。根据日志记录行,该进程正在自杀,因此没有外部代理发出SIGKILL信号。

我猜测(只是猜测),在您的进程中运行的内存管理代码(作为基础设施的一部分,而不是您编写的代码)决定您已经耗尽了某些资源,唯一的解决方法就是停止运行。我预计在达到这个点之前应该会有更多的消息,所以值得浏览日志历史记录,看看在这个点之前是否有有用的警告信息。

在此之前的行是GC日志,这意味着某种内存资源正在枯竭。但是看起来堆并没有满,因此似乎不太可能出现分配失败的情况。如果要分配的对象太大无法放入堆中,或者由于碎片化而无法分配,则仍然可能出现分配失败的情况。然而,在这种情况下,我会期望看到更多相关的日志信息。

我认为捕获更多日志(必要时可以按您的应用程序PID进行过滤)将有助于您取得进展。


3
你说得对,日志中之前有些信息我忽略了。谢谢! - Gus

4
在我的情况下,日志中没有任何警告或线索。
最终,我发现我的问题是我要进入的某个活动(假设为Activity X)正在注册广播接收器,但从未注销。 因此,关闭活动(Activity X)并回到它会导致再次向同一广播接收器注册,这就导致了混乱!
只需在Activity X中添加“unregisterReceiver(mybroadcast);”即可解决问题。(我将其添加到onDestroy中,请确保您在正确的位置注销。)
如果您非常绝望,我建议查看这份幻灯片,它可以解释如何调试Android崩溃:Android crash debugging

谢谢。这并没有解决我的“无异常”问题,但修复了另一个我无法发现的讨厌错误 :) - goodfellow

0

这个问题发生在使用 RXjava 且没有实现 onError 回调方法时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接