2013-02-02 64 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