1

我在 Android 应用程序中有两个进程——主应用程序进程和一个远程服务进程。本机库是从远程服务进程加载的。

我想调试本机库代码。该应用程序是可调试的。本机库是使用 ndk-build 从 Windows 命令行构建的。在 Android.mk 中,该库使用了 -g -ggdb 标志。我正在从 cygwin 运行 ndk-gdb。

测试设备:运行 Android 4.2.2 的 Galaxy Nexus

错误行:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录

在详细信息中,我看到 gdbserver 正在尝试附加到主应用程序进程的进程 ID。从该应用程序中的远程进程加载库是否重要。

详细的ndk-gdb运行信息- $ ndk-gdb --verbose --force
Android NDK安装路径:/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9
使用默认adb 命令:/cygdrive/c/work/android/sdk/android-sdk_r10-windows/android-sdk-windows/platform-tools/adb
找到 ADB 版本:Android Debug Bridge 版本 1.0.31
使用 ADB 标志:
使用 JDB 命令: /cygdrive/c/program files (x86)/java/jdk1.6.0_25/bin/jdb
使用自动检测的项目路径:.
找到包名称:[application-pkg-name]
应用程序目标 ABI:armeabi
设备 API 级别:17
设备 CPU ABI:armeabi-v7a armeabi
兼容设备 ABI:armeabi
使用 gdb 设置初始化:./libs/armeabi/gdb.setup
使用工具链前缀:/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux -androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
使用应用程序输出目录:./obj/local/armeabi
找到可调试标志:true
找到设备 gdbserver:/data/data/[applcation-pkg-name] /lib/gdbserver
找到数据目录:'/data/data/[applcation-pkg-name]'
找到运行 PID:17890
成功启动 gdbserver。
设置网络重定向
## 命令:adb_cmd shell run-as [applcation-pkg-name] lib/gdbserver +debug-socket --attach 17890
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/[applcation-pkg-name]/debug-socket Attached; pid = 17890 [注释:此 pid 用于主应用程序进程]
Listening on Unix socket debug-socket
## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi/app_process
493 KB/s (9592 bytes in 0.019 s)
从设备/模拟器中提取 app_process。
## 命令:adb_cmd pull /system/bin/linker obj/local/armeabi/linker
1165 KB/s(0.053 秒内 63244 个字节)
从设备/模拟器中拉出链接器。
## 命令:adb_cmd pull /system/lib/libc.so obj/local/armeabi/libc.so
2442 KB/s(0.119 秒内 297608 字节)
从设备/模拟器中提取 libc.so。
/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-gdb .exe:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录

一些可能会有所帮助的附注 -
1)如果我在没有 --force 的情况下运行 ndk-gdb 命令,它会给我一个错误,即另一个调试会话正在运行。虽然在上次运行期间出现了 gdb 提示。2) 在 Android 4.3 上,使用相同的应用程序和设置,我收到错误消息“无法提取包的数据目录”

4

0 回答 0