NDKデバッガーを動作させようとしていますが、これまでのところ成功していません。
デバッグシンボルが存在し、有効であることを確認するには、コンパイラオプション-O0および-g、およびndk-buildパラメーターNDK_DEBUG = 1を使用します。
Ndk-gdbスクリプトは問題なく実行され、GDBを起動します。 「sharedlibrary」コマンドを実行すると、次のようになります。
Symbols already loaded for /bla/bla/libMySharedLib.so
ただし、実行を中断しようとすると、テストするためにセグメンテーション違反を追加すると、コールスタック内のそのライブラリからシンボルを取得できません。ミューテックスを待っている間に実行を中断した場合、取得したシンボルはlibcのみです。また、運のないブレークポイントを追加しようとしました。 GDBではブレークポイントを追加でき、コードは正常に実行されますが、ブレークポイントがトリガーされることはありません。
Android 2.2(Froyo)をサポートする必要があるため、APIレベル8を使用しています。
-O0または-gスイッチを使用する必要はありません。次のいずれかを実行する必要があります。
Android:debuggable="true"
ファイルの<application>
タグにAndroidManifest.xml
を配置しますNDK_DEBUG=1
を使用しますAPP_OPTIM := debug
を配置これら3つのことのいずれかを実行すると、-O0および-gスイッチが自動的に使用されます。
Gdbスクリプトなしでgdbを手動で実行してみてください。次の手順が含まれます。
gdbserver
ファイルをデバイスの/data/local
フォルダーにプッシュadb Shell
を次のコマンドgdbserver :5055 --attach PID
で呼び出します。PIDはアプリケーションのプロセスIDです。adb forward tcp:5055 tcp:5055
を実行していますarm-linux-androideabi-gdb.exe
を実行するset solib-search-path obj/local/armeabi
file obj/local/armeabi/libMySharedLib.so
target remote :5055
その後、デバッグできるかどうかを確認します。
ライブラリが使用している他の共有ライブラリのシンボルをlibc.so
のように表示したい場合は、デバイスから(/system/lib
フォルダから)obj/local/armeabi
フォルダにプルします。