我有一个Android应用程序,它包含基于Java的APK,本机可执行文件和本机库。 apk通过套接字与本机(根NDK c / c ++)可执行文件和库进行通信。
我不确定它是否重要但是可执行文件和库是通过cmake编译的,并且被复制为可执行文件然后以root身份运行。我需要使用断点等进行某种类型的调试,无论它是直接在android studio中还是通过命令行。
答案 0 :(得分:1)
您需要在设备上运行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命令(设置断点,加载符号,逐步执行等),例如使用cheatsheet或在评论中提问