如何让ndk-gdb在Android上运行?

Sim*_*lex 37 android gdb symbols android-ndk

我试图让NDK调试器工作但到目前为止没有成功.

为了确保我的调试符号存在且有效,我使用编译器选项-O0和-g,以及ndk-build参数NDK_DEBUG = 1.

ndk-gdb脚本运行时没有问题并启动GDB.什么时候执行"sharedlibrary"命令,我得到这个:

Symbols already loaded for /bla/bla/libMySharedLib.so
Run Code Online (Sandbox Code Playgroud)

但是当我尝试断开执行或者例如添加一个段错误来测试时,我从来没有从调用堆栈中的那个库中获得任何符号.我得到的唯一符号来自libc,如果我在等待互斥锁的情况下中断执行.还尝试添加断点,没有运气.GDB允许我添加断点,代码运行正常,但断点永远不会被触发.

我正在使用API​​级别8,因为我需要支持Android 2.2(Froyo).

Mār*_*iko 67

您不需要使用-O0或-g开关.您需要执行以下操作之一:

  1. 放入文件中android:debuggable="true"<application>标签AndroidManifest.xml
  2. NDK_DEBUG=1在ndk-build之后使用
  3. 放入APP_OPTIM := debugApplication.mk文件

做这三件事中的任何一件都会自动使用-O0和-g开关.

你可以尝试手动运行gdb,没有gdb脚本吗?它涉及以下步骤:

  1. gdbserver文件推送到/data/local设备上的文件夹
  2. 运行您的应用程序并在adb shell以下命令中调用gdbserver :5055 --attach PID,其中PID是您的应用程序进程ID.
  3. adb forward tcp:5055 tcp:5055在主机上运行
  4. arm-linux-androideabi-gdb.exe从你的app文件夹运行
  5. 在gdb中输入以下命令
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/libMySharedLib.so
  8. target remote :5055

然后看看你是否可以调试.

如果要查看库正在使用的其他共享库的符号,请将libc.so它们从设备(从/system/lib文件夹)拉到您的obj/local/armeabi文件夹.

  • 你如何"在设备上推送gdbserver"? (2认同)