如何获得NDK-GDB的工作在Android?如何获得NDK-GDB的工作在Android?(How

2019-05-14 00:28发布

我试图让NDK调试工作,但没有成功为止。

为了确保我调试符号存在和有效,我使用编译器选项-O0和-g和NDK的建造参数NDK_DEBUG = 1。

NDK的-gdb的脚本出来的问题和运行启动GDB。 如果做一个“sharedlibrary”命令,我得到这样的:

Symbols already loaded for /bla/bla/libMySharedLib.so

然而,当我试着将执行或如添加段错误进行测试,我从来没有从调用堆栈库得到任何符号。 我已经得到的唯一符号是从libc的,如果我打破执行,同时它的等待,例如互斥。 也试过,没有运气添加断点。 GDB让我增加了断点,代码运行良好,但断点永远不会触发。

我使用API​​级8,因为我需要支持Android 2.2(升级Froyo)。

Answer 1:

你并不需要使用-O0或-g开关。 你需要做以下之一:

  1. android:debuggable="true"<application>在标签AndroidManifest.xml文件
  2. 使用NDK_DEBUG=1 NDK-生成后
  3. APP_OPTIM := debug中Application.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文件夹中。



文章来源: How to get ndk-gdb working on Android?