我有一个巨大的整体,有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:
- 读取主目录中的init文件(如果有(并执行该文件中的所有命令
- 处理命令行选项和操作数
- 从当前工作目录中的init文件(如果有(读取并执行命令
在步骤4中,正在读取符号,从那时起您可以使用start
命令。但是在步骤3中,符号还没有被读取,并且您不能使用start
命令。