13

2 つの Android プロジェクトがあります。1 つはライブラリで、もう 1 つはこのライブラリを使用する通常のアプリケーションです。私の目的は、Android アプリケーションから共有ライブラリをデバッグすることです。私はこのガイドに従いました:

http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/

そして、最後の行をコメントアウトしました

##$GDBCLIENT -x `native_path $GDBSETUP`

しかし、次の行

##cp -f $GDBSETUP_INIT $GDBSETUP

次のメッセージが表示されます。

it cannot stat ./libs/armeabi-v7a/gdb.setup

Eclipseがアップロードすると思うので、コメントアウトしました。それに加えて、次のことを確認しました。

  • 両方の Android.mk に LOCAL_CFLAGS := -Wall –g を入れました

  • アプリケーションの libs ライブラリで .so を取得しています

  • アプリケーションで debuggable を true にしました

  • solib-search-path ./libs/armeabi-v7a/ を使用して .so を参照するために変更された gdb2.setup パスと、ディレクトリを使用してソースが参照される

System.LoadLibrary 命令をステップインした後、ndk-build-eclipse を実行しましたが、エラーは発生しませんでした。ネイティブでデバッグを開始すると、次のようになりました。

アドレス 0x1 のメモリにアクセスできません

そしてCygwinで私は得ました:

ホスト 0.0.0.0 からのリモート デバッグ

ndk-gdb-eclipse コマンドを実行した結果の出力は次のとおりです。

$ ./ndk-gdb-eclipse --adb=/cygdrive/c/Utilities/adt-bundle-windows/adt-bundle-windows/sdk/platform-tools/adb --project=/cygdrive/c/Projects/IDSmart/IDSmartApp/IDSmart  --force --port=5039 --verbose
Android NDK installation path: /cygdrive/c/Utilities/android-ndk-r8c-windows/android-ndk-r8c/.
Using specific adb command: /cygdrive/c/Utilities/adt-bundle-windows/adt-bundle-windows/sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags:
Using specified project path: /cygdrive/c/Projects/IDSmart/IDSmartApp/IDSmart
Found package name: uk.co.idscan.idsmart
ABIs targetted by application: armeabi-v7a
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /cygdrive/c/Utilities/android-ndk-r8c-windows/android-ndk-r8c/./toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/uk.co.idscan.idsmart/lib/gdbserver
Found data directory: '/data/data/uk.co.idscan.idsmart'
Found running PID: 7922
7922
Killing existing debugging session
## COMMAND: adb_cmd shell kill -9 7864
/system/bin/sh: kill: 7864: Operation not permitted
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: adb_cmd shell run-as uk.co.idscan.idsmart lib/gdbserver +debug-socket --attach 7922
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/uk.co.idscan.idsmart/debug-socket
Attached; pid = 7922
Listening on Unix socket debug-socket
## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process
1373 KB/s (9848 bytes in 0.007s)
Pulled app_process from device/emulator.
## COMMAND: adb_cmd pull /system/bin/linker obj/local/armeabi-v7a/linker
2147 KB/s (39592 bytes in 0.018s)
Pulled linker from device/emulator.
## COMMAND: adb_cmd pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so
2576 KB/s (282316 bytes in 0.107s)
Pulled libc.so from device/emulator.
4

1 に答える 1

0
Cannot access memory at address 0x1

Eclipseで使用しているものと同じgdb2.setupファイルを投稿してください。

通常、これらは solib-search-path が正しくないためにメモリにアクセスできません。gdb2.setup ファイルにプロジェクト lib フォルダーへの絶対パスを入力してみてください。たとえば、次のように設定しています。

set solib-search-path D:/android/android-ndk-r8d/samples/hello-jni/obj/local/armeabi

それが役立つかどうか教えてください。

于 2013-02-22T10:40:07.127 に答える