2013-02-02 51 views
2

我在跟踪我项目中的一个错误。不时,我的应用程序就会被杀死,并在logcat中总有如下一行:“通过信号(11)终止进程”始终与NDK相关?

D/Zygote ( xx): Process xxxx terminated by signal (11)

我一直在寻找这个错误,我总能找到提及对NDK

我正在开发一个使用第三方C库的项目。我并不十分详细地了解这个库,但我可以告诉你它可以与服务器进行一些网络通信。在我的项目中有几个Services,其中一些使用这个库。

所以我的问题是,这个错误是否总是暗示问题来自C库?

如果不是,你可以给我一些Android代码中的Java代码的例子,这也可能导致这个错误吗?

谢谢。

编辑:顺便说一下,在logcat输出中,在前一行之前没有堆栈跟踪。

+0

是不是信号11先前在日志中报废? IIRC这个_process terminated_消息是链中的最后一个。 –

回答

1

很可能,SIGSEGV之前在您的日志中报告过。这可能比最后的信息早了一段时间。这是我的日志这种崩溃的一个的实际快照:

01-29 16:00:39.124 F/libc (3033): Fatal signal 11 (SIGSEGV) at 0x0000002c (code=1) 
... many more ... 
01-29 16:00:48.367 D/Zygote ( 116): Process 3033 terminated by signal (11) 

你可以看到,它花了将近10秒,收到致命信号后合子报告进程终止。你的milage可能会有所不同。

SIGSEGV的实际原因可能在第三方C库或Java中,或者您调用C库的方式。请注意,例如,在引发Java异常时禁止大部分JNI调用。

+1

我确实没有在我的logcat中报告过的SIGSEGV。堆栈跟踪的缺失不会是非Java/Android错误的标志吗?我从来没有见过一个应用程序在没有任何logcat消息之前被杀死。 –

+0

我也没有。但也许这个消息是“在地平线之后”,或者从未到达adb?我遇到了一些配置过的设备,以至于系统组件产生了如此多的日志,导致我的某些应用信息丢失。无论如何,重要的是您可能需要回顾10秒或更长时间才能找到坠机的来源。 –

+0

某些版本的Android有一个问题,如果本机代码摆弄信号处理程序并去掉'SA_SIGINFO'标志,则信号处理程序本身崩溃,并且您在日志中获得零反馈。我在一个平台上捕获了GLES着色器编译器。请参阅https://android.googlesource.com/platform/bionic/+/f84bc8d6f6368f1c846124a8168761ee8cc589c0。我不知道这是否是这里发生的事情,但这是一种可能性。 – fadden