如何让ndk-gdb在Android上工作?
我试图让NDKdebugging器工作,但迄今没有成功。
为了确保我的debugging符号存在且有效,我使用编译器选项-O0和-g,以及ndk-build参数NDK_DEBUG = 1。
ndk-gdb脚本运行时遇到问题并启动GDB。 什么时候做一个“共享库”的命令,我得到这个:
Symbols already loaded for /bla/bla/libMySharedLib.so
但是,当我尝试中断执行或者例如添加段错误来testing时,我从来没有从调用堆栈中获得该库中的任何符号。 我得到的唯一的符号是从libc,如果我等待一个互斥体例如中断执行。 也尝试添加断点没有运气。 GDB允许我添加断点,并且代码运行良好,但断点从不触发。
我正在使用API级别8,因为我需要支持Android 2.2(Froyo)。
您不需要使用-O0或-g开关。 您需要执行以下任一操作:
- 把
android:debuggable="true"
放到AndroidManifest.xml
文件的<application>
标签中 - 在ndk-build之后使用
NDK_DEBUG=1
- 把
APP_OPTIM := debug
放在Application.mk文件中
做这三件事情中的任何一个都会自动使用-O0和-g开关。
你可以尝试手动运行gdb,没有gdb脚本? 它涉及以下步骤:
- 将
gdbserver
文件推送到设备上的/data/local
文件夹 - 运行你的应用程序并在
adb shell
调用以下命令gdbserver :5055 --attach PID
,其中PID是你的应用程序进程ID。 - 在主机上运行
adb forward tcp:5055 tcp:5055
- 从您的应用程序文件夹运行
arm-linux-androideabi-gdb.exe
- 在gdb中input以下命令
-
set solib-search-path obj/local/armeabi
-
file obj/local/armeabi/libMySharedLib.so
-
target remote :5055
然后看看你是否可以debugging。
如果你想看到其他共享库的符号,你的库就像libc.so
一样libc.so
,然后将它们从设备(从/system/lib
文件夹) obj/local/armeabi
你的obj/local/armeabi
文件夹中。
- 如何从Google-Analytics迁移到Firebase-Analytics?
- Android的draw9patch抛出NoClassDefFoundError
- Genymotion如何使用Chrome开发工具进行debugging
- 阿尔法testing人员在哪里下载Google Play Android应用?
- 在使用intellij的设备上INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- Android:什么是android.R.id.content用于?
- Google Cloud Messaging – 在networking状态发生变化之前有时收不到消息
- 如何在Android模拟器中访问文件系统的本地文件?
- 如何获得textview的文本颜色?