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开关.您需要执行以下操作之一:
android:debuggable="true"
的<application>
标签AndroidManifest.xml
NDK_DEBUG=1
在ndk-build之后使用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
从你的app文件夹运行set solib-search-path obj/local/armeabi
file obj/local/armeabi/libMySharedLib.so
target remote :5055
然后看看你是否可以调试.
如果要查看库正在使用的其他共享库的符号,请将libc.so
它们从设备(从/system/lib
文件夹)拉到您的obj/local/armeabi
文件夹.