ndk-gdb中run-as问题

文章详细介绍了在Android设备上使用NDK GDB进行调试时遇到的'运行权限不足'问题,并提供了多种解决方案,包括修改运行方式、获取root权限等方法,最终实现成功调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值