我在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]
申请目标ABIs:armeabi
设备API级别:17
设备CPU ABIs:armeabi-v7a armeabi
兼容设备ABI:armeabi
使用gdb setup init:./ 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-
使用app out目录:./ obj / local / armeabi
找到可调试标志:真实
找到设备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
##命令:adb_cmd forward tcp:5039 localfilesystem:/ data / data / [applcation-pkg-name] / debug-socket
附; pid = 17890 [评论:此pid用于主要申请流程]
听取Unix套接字调试套接字
##命令:adb_cmd pull / system / bin / app_process obj / local / armeabi / app_process
493 KB / s(9519字节,0.019秒)
从设备/模拟器中拉出app_process
##命令:adb_cmd pull / system / bin / linker obj / local / armeabi / linker
1165 KB / s(40353字节,0.053秒)
从设备/仿真器中拉出链接器
##命令:adb_cmd pull /system/lib/libc.so obj / local / armeabi / libc.so
2442 KB / s(在0.119s中为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上,使用相同的应用程序和设置,我收到“无法提取包的数据目录”的错误