これ以上言う前に、このソフトウェアは完全に正気であり、Android サンプルから取得したものであり、クラッシュしないということから始めさせてください :)。
私のチームは最近、Android から正常なバックトレースを取得するのに苦労しています。私たちは LibC から出力を取得します...これが有効なバックトレースを取得する唯一のコンポーネントのようです。それ以外のものは疑問符と浅いバックトレースのみを生成します (したがって、通常は最初に壊れます??、そのポイントを超えて何も表示されないため、通常、たとえばvsnprintfのみが表示されます...それだけです。
私たちは実験を続け、最終的にサンプルからほぼ完全にコピーされたまったく新しいプロジェクトを作成しました。
AndroidManifest.xml には正しいフラグが設定されています。
<application android:label="@string/app_name" android:hasCode="false" android:debuggable="true" >
build.xml にはビルド前のルールがあります。
<target name="-pre-build"> <exec executable="${env.ANDROID_NDK}/ndk-build" failonerror="true"> <arg value="NDK_DEBUG=1" /> </exec> </target>
Application.mkには次の定義があります。
APP_OPTIM := debug
Android.mkファイルでさえ、いくつか調整されています。
LOCAL_MODULE := test LOCAL_SRC_FILES := main.c LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM LOCAL_STATIC_LIBRARIES := android_native_app_glue LOCAL_CFLAGS := -g3 -ggdb -O0 LOCAL_CPPFLAGS := -g3 -ggdb -O0 include $(BUILD_SHARED_LIBRARY)
-gstabs+
とを試してみまし-g -ggdb
たが、それでも同じバックトレースが得られます。
(gdb) bt
#1 0x4005b384 in epoll_wait () from libc.so
#2 0x40120eaa in ?? ()
2 番目の呼び出しは - 間違いなく - ALooper_pollAll
libc を呼び出すネイティブ コードepoll_wait
です。しかし、 に到達する参照はありませんandroid_main
。
コードは完璧です。cを押して、クラッシュすることなく何時間も実行できますが、停止してバックトレースを出力すると、いつでも同じ 2 行が返されます。
すべての助けと提案に深く感謝します。私たちの製品でいくつかの問題が発生しました..まあ、私たちが今考えることができる唯一の手段は本当に中世です.