debugging - 在 gdb 中附加进程时如何有选择地读取和加载符号?

标签 debugging gdb

我的二进制文件使用了许多不同的共享库。在使用 gdb 附加进程时,加载和读取所有这些库中的符号大约需要 5 分钟。

有没有办法在使用 gdb 附加进程时有选择地读取和加载符号?

最佳答案

您可以 set auto-solib-add off然后使用 sharedlibrary 命令有选择地加载符号。示例:

$ gdb -e ./a.out
(gdb) set auto-solib-add off
(gdb) file a.out
Reading symbols from a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x4004ba: file sig.c, line 4.
Starting program: /home/a3f/a.out 

Temporary breakpoint 1, main () at sig.c:4
4       do();
(gdb) print environ
No symbol "environ" in current context.
(gdb) info shared
From                To                  Syms Read   Shared Object Library
0x00007ffff7ddcae0  0x00007ffff7df5130  No          /lib64/ld-linux-x86-64.so.2
                                        No          linux-vdso.so.1
0x00007ffff7a504a0  0x00007ffff7b7cc73  No          /lib/x86_64-linux-gnu/libc.so.6
(gdb) sharedlibrary libc
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
(gdb) print environ
 $1 = (char **) 0x7fffffffe3b8
(gdb) print _dl_open
No symbol "_dl_open" in current context.
(gdb) sharedlibrary
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.19.so...done.
done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
(gdb) print _dl_open
$1 = {void *(const char *, int, const void *, Lmid_t, int, char **, char **)} 0x7ffff7dee350 <_dl_open>

关于debugging - 在 gdb 中附加进程时如何有选择地读取和加载符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374322/

相关文章:

assembly - 如何在 gdb 中给定地址处的汇编指令上中断?

c++ - GDB 与 C++ 调用 C 代码

c++ - 将 Qt Creator 设置为在 Windows 上使用最新版本的 g++ 和 gdb

debugging - Win7如何调试登录屏保?

php - wp_enqueue 的 WP_debug 错误

oracle - Oracle PL/SQL-立即输出/控制台打印的提示

eclipse - 在 Eclipse 中调试已编译的 Groovy 脚本

c++ - 当我没有 Xcode 项目时,如何在 Mac OS 上获得可视化调试器?

c++ - 点云库应用程序难以调试,可能是由于线程?

debugging - Powershell 不会将详细级别传递给被调用的函数