私が何かをもっと言う前に、まずはソフトウェアが完全に正常であることから始めましょう。それはAndroidのサンプルから取られ、クラッシュしません:)。Android NDKのデバッグとバックトレースの疑問符
私のチームは最近、アンドロイドから元気なバックトレースを得るのに苦労しています。私たちは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行を返します。
すべてのヘルプと提案に感謝します。私達は私達の製品でいくつかの問題に遭遇しました。私たちが今考えている唯一の手段は真に中世のものです。