如何调试未直接集成到APK应用程序中的android本机可执行文件和库

时间:2016-11-08 16:51:05

标签: android c++ android-studio android-ndk native-executable

我有一个Android应用程序,它包含基于Java的APK,本机可执行文件和本机库。 apk通过套接字与本机(根NDK c / c ++)可执行文件和库进行通信。

我不确定它是否重要但是可执行文件和库是通过cmake编译的,并且被复制为可执行文件然后以root身份运行。我需要使用断点等进行某种类型的调试,无论它是直接在android studio中还是通过命令行。

1 个答案:

答案 0 :(得分:1)

您需要在设备上运行gdbserver并将其附加到您的可执行文件

gdbserver预先构建了ndk,通常位于<ndk>/prebuilt/android-arm/gdbserver/

之下
  1. 将gdbserver二进制文件复制到您的设备,例如复制到/data/local/tmp并使用chmod

  2. 授予其可执行权限
  3. 如果您的可执行文件已在运行,请使用PID命令查找其ps并将gdb附加到其中:

    gdbserver :5039 --attach <PID>

  4. 请注意,5039是通常用于使用gdb进行调试的端口号,如果您愿意,可以使用自己的端口号

    1. 使用

      设置从设备到PC的端口转发

      adb forward tcp:5039 tcp:5039

    2. 在本地运行gdb,注意你也需要带有ndk的arm目标gdb,通常在

      <ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb

    3. 将gdb附加到您的流程

      target remote :5039

    4. 从这里你需要使用符合你的调试期望的gdb命令(设置断点,加载符号,逐步执行等),例如使用cheatsheet或在评论中提问