在gdb会话中选择调试信息文件的子集

时间:2016-12-07 16:54:10

标签: debugging gdb

在我的fedora盒子上,我安装了很多独立的调试信息。

  

sudo dnf debuginfo-install <list of packets>

现在,如果我调试一些简单的代码,它需要很长时间,直到显示某个符号或打印一些值。很明显,绝对需要评估所有已安装的符号文件以获取所有信息。

但是如果我有问题,比如像goocanvas这样的lib我只想让我的本地调试smbol使用我自己编译的代码生成-g选项而调试goocanvas libs的信息。

如何实现这种选择?只有重命名调试信息文件的文件夹并生成所需的副本?也许作为符号链接?或者在任何地方都有一个共同的选择选项吗?

1 个答案:

答案 0 :(得分:2)

您可以跳过共享库中的所有调试信息,只加载goocanvas lib符号。以下是如何在gdb会话中执行此操作的示例:

[ ~]$ gdb -q /your/binary
(gdb) set auto-solib-add off 
(gdb) start 

Temporary breakpoint 1, 0x000055555564edd0 in main ()
(gdb) sharedlibrary goocanvas

来自gdb doc

  

如果您的程序使用大量具有调试信息的共享库   占用大量内存,可以减少gdb内存   足迹,防止它自动加载符号   共享库。为此,请先键入set auto-solib-add   运行劣质,然后加载每个调试符号的库   需要使用sharedlibrary regexp,其中regexp是常规的   与您想要符号的库匹配的表达式   加载。

另请参阅此相关问题:How to prevent GDB from loading debugging symbol for a (large) library?