1

我有一个拥有 100 多个共享库的巨大单体。其中一些是如此巨大,以至于如果我让 GDB 加载所有符号,几乎我所有的 PC RAM 都被填满了,我无能为力。所以我想禁用加载所有库,只加载我需要的库。我分两步完成:

禁用加载所有符号

set auto-solib-add off

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

shared /opt/build/Bin/drivers/* 

现在我的意图是使用 .gdbinit 文件(也由我的 IDE QtCreator 加载)自动执行此操作。但是,鉴于这些命令是在 GDB 启动期间执行的,我不确定如何在不知道是否加载了相应的库的情况下执行第二个命令。非常感谢任何帮助。谢谢你。

4

1 回答 1

1

在不知道是否加载了相应的库的情况下,我不确定如何执行第二个命令

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

您似乎无法start在主目录 init 文件中使用命令,因为尚未读取符号,因此您无法在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命令。

于 2020-04-27T15:49:51.500 回答