ndk-gdbでデバッグしようとしているC++Androidアプリケーションがあります。アプリケーションは複数のスレッドを使用しますが、おそらくndkのr5は複数のスレッドをサポートしています。また、gdbが起動するところまで到達していません。次のコマンドを実行します。
ndk-gdb --start --force --verbose
次に、ndkとsdk(または少なくともadb)の適切なパス、および必要なABIなどを見つけます。
$ ndk-gdb --start --force --verbose
Android NDK installation path: /home/leif/eclipse/android-ndk-r5b
Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb'
Using auto-detected project path: .
Found package name: net.leifandersen.mobile.android.marblemachine
ABIs targetted by application: armeabi
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
次に、gdbサーバーを探し、適切なPIDを含めてそれを見つけ、アクティビティを開始します。
しかし、その後、パッケージが見つからないことがわかります。
Setup network redirection
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package '<package name>' is unknown/debug-socket
次に、adb(ヘルプファイル)を不適切に使用した場合に得られるものを吐き出し、続いて次のようにします。
ERROR: Could not setup network redirection to gdbserver?
Maybe using --port=<port> to use a different TCP port might help?
run-as: Package '<package name>' is unknown
/data/system/packages.listを調べましたが、確かにapkはそこにあり、それが指している場所はファイルシステム上で正しいです。だからそれは問題ではありません。
このチュートリアル: http: //vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/は、Eclipseビルドの削除と再インストール、およびクリーンアップを推奨しています。
パッケージのビルドにEclipseを使用しませんでしたが、すべてをクリーンアップして最初からコンパイルし、削除して、再インストールしました。
誰かが同様の問題を抱えていましたか、そしてどのようにそれらを解決しましたか?ありがとうございました。
編集:ああ、私は役に立たない別のポートを試しましたが、とにかく5039(デフォルトのポート)には何もないようです。そして、afaik、私はその接続をブロックするファイアウォールを持っていません。私はUbuntu11.04でも開発しています。
Edit2:うーん...新しいndk(r5c)のように見えますが、エラーメッセージも変更されました:
ERROR: Could not extract package's data directory. Are you sure that
your installed application is debuggable?
はい、マニフェストではdebuggableがtrueに設定されており、すべてのネイティブコードは次のコードで構築されています。
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map