Android NDK solib-search-path on Windows 使用不正确的斜杠



我正在尝试使用 Eclipse(开普勒)在 Windows 上调试 NDK 项目,但 GDB 找不到 .so 文件的符号,因为搜索路径中的斜杠方向不正确。使用 NDK r9 和 SDK 22.2.1,当我尝试运行该应用程序时,GDB 显示:

警告:无法加载 64 个库的共享库符号,例如/system/bin/linker。

使用"信息共享库"命令查看完整列表。

你需要"设置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-search-path 以使用正斜杠,我会得到这个:

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 将成功命中本机代码中的断点。libs\armeabi-v7a 文件夹中的 gdb.setup 文件有以下行:

set solib-search-path ./obj/local/armeabi-v7a

但我不确定这条路径在哪里变成了绝对路径。我猜GDB在这一点上使用带有反斜杠而不是正斜杠的路径,但我不确定这是在哪里发生的。我确实尝试修改创建 gdb.setup 文件的 Android NDK 构建脚本,甚至尝试输入不同的路径,但 show solib-search-path 的输出完全相同,所以我甚至不确定 GDB 是否使用该搜索路径。以前有没有人遇到过这个问题,或者有谁知道当我从 Eclipse 运行时如何让 GDB 以正确的搜索路径启动?

我认为

这可能只是 GDB 直到以后才加载符号。在加载项目的 .so 之前,我确实有延迟,以便让 GDB 有时间连接。我将延迟移到调用 loadLibrary 之后,它现在似乎可以很好地拾取符号。

最新更新