2

我正在跟踪我的项目中的错误。有时,我的应用程序会被杀死,并且在 logcat 中总是有以下行:

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

我一直在搜索这个错误,我总是发现提到NDK.

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

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

如果没有,您能否给我一些 Android 中的 Java 代码示例,这也可能导致此错误?

谢谢。

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

4

1 回答 1

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)

您可以看到 Zygote 在收到致命信号后报告进程终止花了将近 10 秒。您的里程可能会有所不同。

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

于 2013-02-03T08:45:20.273 回答