将GDB配置为仅加载特定符号



我有一个巨大的整体,有100多个共享库。其中一些符号太大了,如果我让GDB加载所有符号,我的电脑RAM几乎都被填满了,我什么都做不了。所以我想禁用加载所有库,只加载我需要的库。我通过两个步骤完成:

禁用加载所有符号

set auto-solib-add off

应用程序启动后,只加载所需的库

shared /opt/build/Bin/drivers/* 

现在,我的意图是使用.gdbinit文件(它也由我的IDE QtCreator加载(来实现自动化。然而,考虑到这些命令是在GDB启动期间执行的,我不知道如何在不知道是否加载了相应库的情况下执行第二个命令。非常感谢您的帮助。非常感谢。

如果不知道相应的库被加载

如果启动程序并在main开始时停止,则应加载所有动态链接库。大多数情况下,在shared ...命令之前添加start命令就足够加载库了。另请参阅此问题中的详细示例:如何在gdb中附加进程时选择性地读取和加载符号?。

您似乎无法在主目录init文件中使用start命令,因为符号尚未被读取,因此无法在main上设置临时断点。另一个选项是在当前工作目录中创建一个单独的init文件,并放置3个命令:

set auto-solib-add off
start
shared /opt/build/Bin/drivers/* 

发件人https://sourceware.org/gdb/current/onlinedocs/gdb/Startup.html#Startup:

  1. 读取主目录中的init文件(如果有(并执行该文件中的所有命令
  2. 处理命令行选项和操作数
  3. 从当前工作目录中的init文件(如果有(读取并执行命令

在步骤4中,正在读取符号,从那时起您可以使用start命令。但是在步骤3中,符号还没有被读取,并且您不能使用start命令。

最新更新