2012-10-05 17 views
5

私はアンドロイドNDK & JNIを使​​用するアプリで作業しています。誰もがこのことを知っている場合、私は任意のアンドロイド4.0以上のバージョンに私のアプリを実行するたびに ...私のアプリがクラッシュすると、次のエラーを与えるだろう...アンドロイド4.0以降のアプリケーションクラッシュ

A/libc(18556): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 
D/libEGL(18606): loaded /system/lib/egl/libGLES_android.so 
D/libEGL(18606): loaded /system/lib/egl/libEGL_adreno200.so 
D/libEGL(18606): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
D/libEGL(18606): loaded /system/lib/egl/libGLESv2_adreno200.so 
I/Adreno200-EGLSUB(18606): <ConfigWindowMatch:2078>: Format RGBA_8888. 
D/OpenGLRenderer(18606): Enabling debug mode 0 

主な問題はFatal signal 11 (SIGSEGV) at 0xdeadbaad(code=1)

..です理由を教えてください。

+0

あなたの.SOが壊れました。 Cコードにセグメンテーション違反があります。ソースを投稿し、回答をフォーマットして、どこかで取得できるかもしれません。 – Shark

+0

確かに。 SIGSEGVは死んでもらわなければならない。 –

+1

ログには通常より多くの情報があります(例:http://stackoverflow.com/questions/5314036/how-to-use-addr2line-in-android)。 –

答えて

0

最初に、セグメンテーションフォールト、特に0xdeadbaadはメモリ破損などを意味しますが、私は最近、NDKでこれがアサーションのデフォルトの動作であることを発見しました:アサート失敗時にSIGSEGVを送信しますSIGTRAPの値を返し、メモリポインタをこの16進文字列に設定します。

コードがアサートするように呼び出すか、サードパーティのソフトウェアを使用している場合は、すべての呼び出しに適切な値が渡されていることを確認する必要があります。これを確認する簡単な方法は、NDEBUGを1に設定してライブラリを構築することです(デフォルトでは、Application.mkにAPP_OPTIM:= releaseを設定した場合)、そしてまったく同じ問題があるかどうかを確認します。

これが役に立ちます。

関連する問題