我试图调试在Windows上使用Eclipse(开普勒)的NDK项目,但GDB不会找到.so文件的符号,因为方向搜索路径中的斜线不正确。使用NDK r9和SDK 22.2.1,当我尝试运行应用程序时,GDB显示:在Windows上使用不正确的斜杠Android NDK solib搜索路径
警告:无法为64个库加载共享库符号,例如: /系统/斌/连接器。
使用“info sharedlibrary”命令查看完整列表。
你需要“设置solib-search-path”或“set sysroot”吗? 警告:无法找到动态链接器断点功能。
GDB将重新尝试重试。同时,很可能GDB无法在dlopen()之后调试共享库初始化程序或解决挂起的断点。
没有加载符号表。使用“文件”命令。
没有加载符号表。使用“文件”命令。
没有加载符号表。使用“文件”命令。
对于我的库中设置的每个断点,“无符号表加载...”行出现一次。问题似乎是GDB没有找到未被分割的.so文件,因为搜索路径包含反斜杠而不是正斜杠。如果我暂停程序并执行以下GDB命令,这是输出我得到:
show solib-search-path
The search path for loading non-absolute shared library symbol files is C:\\Users\\Username\\Projects\\Project\\Android/obj/local/armeabi-v7a/.
info shared
From To Syms Read Shared Object Library
0x4003fff0 0x4006db40 Yes C:/Users/Username/Projects/Project/Android/obj/local/armeabi-v7a/libc.so
0x5bda8598 0x5bf5aa50 No C:/Users/Username/Projects/Project/Android/obj/local/armeabi-v7a/libProject.so
如果我再更新solib搜索路径使用正斜杠,我得到这个:
set solib-search-path C:/Users/Username/Projects/Project/Android/obj/local/armeabi-v7a/
warning: Could not load shared library symbols for 74 libraries, e.g. /system/bin/linker.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will retry eventurally. Meanwhile, it is likely
that GDB is unable to debug shared library initializers
or resolve pending breakpoints after dlopen().
info shared
From To Syms Read Shared Object Library
0x4003fff0 0x4006db40 Yes C:/Users/Username/Projects/Project/Android/obj/local/armeabi-v7a/libc.so
0x5bda8598 0x5bf5aa50 Yes C:/Users/Username/Projects/Project/Android/obj/local/armeabi-v7a/libProject.so
之后,GDB将在本机代码中成功击中断点。在库的gdb.setup文件\ armeabi-V7A文件夹具有行:
set solib-search-path ./obj/local/armeabi-v7a
但我不知道这条道路被改变成一个绝对路径。我猜这是GDB使用带反斜杠的路径而不是正斜杠的路径,但我不确定发生了什么。我曾尝试修改创建gdb.setup文件的Android NDK构建脚本,甚至尝试过放入不同的路径,但show solib-search-path的输出结果完全相同,所以我甚至不确定GDB是什么使用该搜索路径。有没有人遇到过这个问题,或者没有人知道我从Eclipse运行时如何让GDB启动正确的搜索路径?