我有一个由基于 Java 的 APK、本机可执行文件和本机库组成的 android 应用程序。apk 通过套接字与本机(根 NDK c/c++)可执行文件和库进行通信。
我不确定它是否重要,但可执行文件和库是通过 cmake 编译的,并复制为可执行文件,然后以 root 身份运行。我需要使用断点等进行某种类型的调试,无论它是直接在 android studio 中还是通过命令行。
我有一个由基于 Java 的 APK、本机可执行文件和本机库组成的 android 应用程序。apk 通过套接字与本机(根 NDK c/c++)可执行文件和库进行通信。
我不确定它是否重要,但可执行文件和库是通过 cmake 编译的,并复制为可执行文件,然后以 root 身份运行。我需要使用断点等进行某种类型的调试,无论它是直接在 android studio 中还是通过命令行。
您需要在设备上运行 gdbserver 并让它附加到您的可执行文件
gdbserver 是用 ndk 预构建的,通常在<ndk>/prebuilt/android-arm/gdbserver/
将 gdbserver 二进制文件复制到您的设备,例如,/data/local/tmp
并为其授予可执行权限chmod
如果您的可执行文件已经在运行,请PID
使用ps
命令找到它并将 gdb 附加到它:
gdbserver :5039 --attach <PID>
请注意,5039 是端口号,通常用于使用 gdb 进行调试,您可以使用自己的端口号
设置从设备到PC的端口转发
adb forward tcp:5039 tcp:5039
在本地运行 gdb,注意你还需要 ndk 附带的 arm 目标 gdb,通常在
<ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
将 gdb 附加到您的进程
target remote :5039
从这里开始,您需要使用符合您的调试期望的 gdb 命令(设置断点、加载符号、单步执行等),例如使用备忘单或在评论中询问