当目标已剥离库和二进制文件并且主机具有带有“.debug”目录的相应树时要使用哪些 gdb 设置命令

当目标已剥离库和二进制文件并且主机具有带有“.debug”目录的相应树时要使用哪些 gdb 设置命令

我手头有一个设置,其中目标设备仅删除了库和二进制文件。目标有 gdbserver。在主机上我使用 gdb-multiarch。主机有一个目录,其中包含各自的“.debug”目录。主机上的此目录不包含未剥离的库/二进制文件,仅包含 .debug 目录

   <host/dir/path>/bin/.debug
   <host/dir/path>/lib/.debug
   <host/dir/path>/usr/bin/.debug
   <host/dir/path>/usr/lib/.debug
   <host/dir/path>/usr/sbin/.debug
   <host/dir/path>/sbin/.debug

我尝试了以下选项,但无法将 gdb-multiarch 指向包含 .debug 的本地树

选项1

    set debug-file-directory <local-host-dir>

观察到的问题是 gdb 认为它会在远程目标上找到 .debug

    Reading symbols from target:/usr/sbin/helloworld...Reading /usr/sbin/.debug/helloworld from remote target...
    (no debugging symbols found)...done.

选项2

    set sysroots <local-host-dir>

观察到的问题是没有二进制文件

我必须使用哪些 gdb 命令才能从本地主机加载符号文件并使用目标中相应的库/二进制文件?

答案1

这对我来说不是一个有效的答案,但是这三行应该会对您的调试体验产生重大影响。

set solib-search-path /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib

因此,我在工作中使用 ARM 的 linaros 编译器,构建过程的一部分包括引用标准库的 sysroot-glibc-linaro 目录。

set sysroot ../build/_arm-linux-gnueabihf/root

您的构建环境应该生成一个与 ARM 遥控器上的根目录非常接近的目录。例如,当我在上面列出我的根目录时,我会得到您会看到的常见内容,例如 usr/lib/bin/etc/...etc。这样,当 gdb 在本地查找 1 对 1 匹配时,您的目录结构就会排列起来以实现这一目的。

set debug-file-directory ../arm-linux-gnueabihf/debug-syms

因此,如果您的二进制文件也被删除了调试信息并放在其他地方,那么它应该像使用上面的命令一样简单。但我也遇到了与您相同的问题,具体取决于我使用的命令组合。

(gdb) show sysroot
The current system root is "/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/root/".    
(gdb) show solib-search-path 
The search path for loading non-absolute shared library symbol files is /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib.
(gdb) show debug-file-directory 
The directory where separate debug symbols are searched for is "/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms".
(gdb) target remote 10.235.221.21
10.235.221.21: No such file or directory.
(gdb) target remote 10.235.221.21:123
Remote debugging using 10.235.221.21:123
No executable file now.
warning: Could not load vsyscall page because no executable was specified
0xb43f7916 in ?? ()
(gdb) set sysroot ""
Error reading attached process's symbol file.
: No such file or directory.
warning: Could not load shared library symbols for 14 libraries, e.g. /lib/libpal.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libFW.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libFW.so)
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcClient.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcClient.so)
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcServer.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcServer.so)
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libcrypt.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libpthread.so.0...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/librt.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libstdc++.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libm.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libgcc_s.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libc.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libnsl.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libresolv.so.2...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/ld-linux-armhf.so.3...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libdl.so.2...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libnss_files.so.2...
Error reading attached process's symbol file.
: No such file or directory.
(gdb) set solib-search-path /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/
Error reading attached process's symbol file.
: No such file or directory.
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Error reading attached process's symbol file.
: No such file or directory.

我得到的印象是,您要么设置 sysroot,要么设置调试文件目录,但绝不能同时设置两者。 sysroot 似乎只是期望所有内容都出现在本地,并且我认为如果调试符号不被剥离到单独的 .debug 文件中,效果最好。

我只是吐槽这一切,因为我知道我已经解决了所有的难题,但它不起作用,我也明白了......

Reading /home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms/lib//libunwind-arm.so.8.0.1.debug from remote target...
Reading target:/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms/lib//libunwind-arm.so.8.0.1.debug from remote target...
(No debugging symbols found in target:/lib/libunwind-arm.so.8)

消息,但对我来说,你可以看到我在路径上得到了一个额外的 / ,我只是不知道它是否期望在 // 之间有其他东西

相关内容