0

我正在使用 GDB 调试我的 C 程序。而且因为我正在处理SIGUSR1我的程序。因此,一旦我使用我的程序可执行文件运行 gdb,例如 -

gdb <my_executable>

在 gdb 提示下(gdb)我需要输入 -

handle SIGUSR1 nostop noprint pass

因为我每次都需要这样做,所以我想把这个handle命令放在初始化脚本中。所以在谷歌搜索之后,我了解了~/.gdbrcand ~/.gdbinit。我试图将handle命令放在这两个文件中,但在 gdb 从可执行文件中读取符号后,我仍然没有看到该句柄命令被执行一次。

这有什么问题?

编辑GNU gdb (GDB) 7.2.2

编辑 2:我的 .gdbrc 文件内容看起来像 -

 echo "hello from gdbrc"
 handle SIGUSR1 nostop noprint pass
 run 204

编辑 3:即使我尝试使用 GNU gdb (GDB) 8.1.3我仍然面临同样的问题。

编辑 4~/.gdbrcand~/.gdbinit被授予完全访问权限-

-rwxrwxrwx   1 darshan grp      68 Oct  9 22:14 .gdbint
-rwxrwxrwx   1 darshan grp      67 Oct  9 22:14 .gdbrc

编辑 5:我错误地将文件命名为“ .gdbint”而不是“ .gdbinit”。重命名后,我发现GDB 8.1.3它在启动时正在读取。但是,GDB 7.2.2我仍然看到问题 -.gdbinit启动时未读取文件。

并且~/.gdbrc不是正确的文件名,GDB 无法识别。

4

1 回答 1

1

我可以假设 GDB 7.2.2 不支持 .gdbinit 吗?

GDB 一直支持阅读~/.gdbinit(至少从 4.0 版开始,但可能更早)

您应该能够通过查看来自的输出来弄清楚发生了什么

strace -e file gdb --version |& grep gdbinit

这是我看到的:

stat("/home/employedrussian/.gdbinit", {st_mode=S_IFREG|0640, st_size=629, ...}) = 0
stat(".gdbinit", 0x7ffe51ef72f0)        = -1 ENOENT (No such file or directory)

更新:

当我运行命令时,我在 GDB 7.2.2 中看不到任何输出,但在 GDB 8.1.3 中,我看到的输出与您相同。

好的,看来您的 GDB 7.2.2 版本已损坏。尝试更新版本。

我找不到任何关于 GDB not reading 的错误.gdbinit,但它可能在某个时候暂时被破坏了。


~/.gdbinit 和 ~/.gdbrc 之间有什么不同的用途

前者由 GDB 读取,后者不是(您从哪里得到 GDB 会读取它的想法?)。

更新:

我认为就像许多其他 linux 应用程序一样

在启动时读取文件UNIX shell 约定~/.${SHELL}rc,其他应用程序也可能这样做。但 GDB 不是其中之一。

http://stackoverflow.com/a/7195718/5347487

那个答案是错误的。

于 2020-10-10T06:23:24.787 回答