3

Java ベースの APK、ネイティブ実行可能ファイル、およびネイティブ ライブラリで構成される Android アプリケーションがあります。apk は、ソケットを介してネイティブ (ルート NDK c/c++) 実行可能ファイルおよびライブラリと通信します。

それが問題かどうかはわかりませんが、実行可能ファイルとライブラリは cmake を介してコンパイルされ、実行可能ファイルにコピーされてからルートとして実行されます。Androidスタジオに直接あるか、コマンドラインを介しているかに関係なく、ブレークポイントなどを使用して何らかのタイプのデバッグを行う必要があります。

4

1 に答える 1

2

デバイスで gdbserver を実行し、実行可能ファイルにアタッチする必要があります

gdbserver には ndk があらかじめ組み込まれており、通常は<ndk>/prebuilt/android-arm/gdbserver/

  1. gdbserver バイナリをデバイスにコピーします。たとえば/data/local/tmpchmod

  2. 実行可能ファイルが既に実行されている場合は、PIDwithpsコマンドを見つけて gdb をアタッチします。

    gdbserver :5039 --attach <PID>

5039 は gdb でのデバッグに通常使用されるポート番号であることに注意してください。必要に応じて独自のものを使用できます。

  1. デバイスからPCへのポート転送を設定します

    adb forward tcp:5039 tcp:5039

  2. gdb をローカルで実行します。通常、ndk に付属しているアーム ターゲット gdb が必要であることに注意してください。

    <ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb

  3. プロセスに gdb をアタッチする

    target remote :5039

ここから、デバッグの期待に一致する gdb コマンドを使用する必要があります (ブレークポイントの設定、シンボルのロード、ステップスルーなど)。たとえば、チートシートを使用するか、コメントで質問してください

于 2016-11-09T22:23:18.550 に答える