Android NDK提供了一个运行gdb的脚本:ndk-gdb,目的是方便像我这类的菜鸟使用,没想到在我的Defy上运行失败,提示:
"ERROR: Could not extract package's data directory. Are you sure that your installed application is debuggable?"
查看ndk-gdb脚本,发现adb shell run-as <PackageName>失败,没关系,脚本本来是想获取pacakge的DATA_DIR,可以直接替换成Package的绝对路径:
DATA_DIR="/data/data/<PackageName>"
下面还有一处使用run-as命令的,使用DATA_DIR替换:
run $ADB_CMD shell $DATA_DIR/lib/gdbserver +$DEBUG_SOCKET --attach $PID
(参考:http://stackoverflow.com/questions/6158953/running-ndk-gdb-with-package-not-found-error-on-motorola-phone)
---------------------
原以为大功告成,没想到ndk-gdb --verbose提示:
Cannot attach to process XXXX: Operation not permitted (1)
没有足够的权限来运行gdbserver,看来只能通过adb shell + su来手动跑gdbserver了:
1. get root access: adb shell + su
2. get PID of app you want to debug: ps | grep your_app_package
3. run gdb server: /data/data/<PackageName>/lib/gdbserver :5039 --attach PID
开一个新的终端:
1. adb forward tcp:5039 tcp:5039
2. adb pull system/bin/app_process <project_path>/obj/local/armeabi/app_process
3. adb pull system/bin/libc.so <project_path>/obj/local/armeabi/libc.so
然后 $ToolChain/gdb -x <project_path>/obj/local/armeabi/gdb.setup
(参考:http://stackoverflow.com/questions/4873124/android-native-debug-ndk-gdb-on-htc-desire-run-as-flaw)
-----------------------------------------------------------
据说packages.list文件大于8K会造成run-as的问题,又说Package名要大于3层才能避免,没试过。
附一个网上对run-as问题讨论:http://code.google.com/p/android/issues/detail?id=16391
"ERROR: Could not extract package's data directory. Are you sure that your installed application is debuggable?"
查看ndk-gdb脚本,发现adb shell run-as <PackageName>失败,没关系,脚本本来是想获取pacakge的DATA_DIR,可以直接替换成Package的绝对路径:
DATA_DIR="/data/data/<PackageName>"
下面还有一处使用run-as命令的,使用DATA_DIR替换:
run $ADB_CMD shell $DATA_DIR/lib/gdbserver +$DEBUG_SOCKET --attach $PID
(参考:http://stackoverflow.com/questions/6158953/running-ndk-gdb-with-package-not-found-error-on-motorola-phone)
---------------------
原以为大功告成,没想到ndk-gdb --verbose提示:
Cannot attach to process XXXX: Operation not permitted (1)
没有足够的权限来运行gdbserver,看来只能通过adb shell + su来手动跑gdbserver了:
1. get root access: adb shell + su
2. get PID of app you want to debug: ps | grep your_app_package
3. run gdb server: /data/data/<PackageName>/lib/gdbserver :5039 --attach PID
开一个新的终端:
1. adb forward tcp:5039 tcp:5039
2. adb pull system/bin/app_process <project_path>/obj/local/armeabi/app_process
3. adb pull system/bin/libc.so <project_path>/obj/local/armeabi/libc.so
然后 $ToolChain/gdb -x <project_path>/obj/local/armeabi/gdb.setup
(参考:http://stackoverflow.com/questions/4873124/android-native-debug-ndk-gdb-on-htc-desire-run-as-flaw)
-----------------------------------------------------------
据说packages.list文件大于8K会造成run-as的问题,又说Package名要大于3层才能避免,没试过。
附一个网上对run-as问题讨论:http://code.google.com/p/android/issues/detail?id=16391