GDB没有接受放置在~/.gdbint和/或~/.gdbrc文件中的指令

GDB没有接受放置在~/.gdbint和/或~/.gdbrc文件中的指令,gdb,gdbinit,Gdb,Gdbinit,我正在使用GDB调试我的C程序。 由于我在程序中处理SIGUSR1。 所以一旦我用我的可执行程序运行gdb,比如- gdb <my_executable> 因为我每次都需要这样做,所以我想把这个handle命令放在init脚本中。 所以在谷歌搜索之后,我了解了~/.gdbrc和~/.gdbinit。我试图在这两个文件中放置handle命令,但我仍然看不到在gdb从可执行文件读取符号后handle命令执行一次 这有什么问题吗 编辑:GNU gdb(gdb)7.2.2 编辑2:My.g

我正在使用GDB调试我的C程序。 由于我在程序中处理
SIGUSR1
。 所以一旦我用我的可执行程序运行gdb,比如-

gdb <my_executable>
因为我每次都需要这样做,所以我想把这个
handle
命令放在init脚本中。 所以在谷歌搜索之后,我了解了
~/.gdbrc
~/.gdbinit
。我试图在这两个文件中放置
handle
命令,但我仍然看不到在gdb从可执行文件读取符号后handle命令执行一次

这有什么问题吗

编辑:GNU gdb(gdb)7.2.2

编辑2:My.gdbrc文件内容如下所示-

 echo "hello from gdbrc"
 handle SIGUSR1 nostop noprint pass
 run 204
编辑3:即使我尝试使用GNU gdb(gdb)8.1.3,我仍然面临同样的问题

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

-rwxrwxrwx   1 darshan grp      68 Oct  9 22:14 .gdbint
-rwxrwxrwx   1 darshan grp      67 Oct  9 22:14 .gdbrc
编辑5:我错误地将文件命名为“
.gdbint
”而不是“
.gdbinit
”。 重命名后,我发现使用
gdb8.1.3
,它在启动时被读取。但是,使用
gdb7.2.2
时,我仍然看到了问题-
.gdbinit
文件在启动时不被读取

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

我可以假设GDB7.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)
更新:

当我运行该命令时,我没有看到GDB7.2.2的输出,但是在GDB8.1.3中,我看到了与您相同的输出

好的,看起来您有一个损坏的GDB7.2.2版本。试试新的版本

我找不到任何关于GDB不读取
.gdbinit
的bug,但可能它在某个时候暂时被破坏了


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

前者是由GDB读取的,后者不是(你从哪里知道GDB会读取它?)

更新:

我的想法和许多其他linux应用程序一样

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


这个答案是错误的。

你能把
gdb--version | head-1
的输出添加到你的问题中吗?如果你把
echo done loading\n
添加到
/.gdbinit
文件的末尾,然后再次运行gdb,你能看到
done loading
行吗?@MarkPlotnick我尝试在两个文件中添加echo命令,但我在输出中看不到打印。但是,当我将.gdbrc作为-X参数传递时,我可以看到输出。因此,似乎.gdbint/.gdbrc文件在开始时没有执行,即使我尝试使用GNU gdb(gdb)8.1.3,我仍然面临同样的问题。您的列表显示
-rwxrwx 1 darshan grp 68 Oct 9 22:14.gdbint
而不是
.gdbinit
;这仅仅是一个剪切粘贴错误吗?>
strace-e文件gdb--version |&grep gdbinit
当我运行命令时,我没有看到
gdb7.2.2
的输出,但是使用
gdb8.1.3
,我看到的输出与您一样。>
前者由GDB读取,后者不是(你从哪里知道GDB会读取它?)
我想,就像许多其他linux应用程序一样,GDB也会有一个*rc文件,我用谷歌搜索了它,找到了这个答案——感谢你花时间查看GDB中是否有任何bug。我希望我能&;amp;amp#39;我已经转移到了GDB的更新版本。但有一个问题——当我尝试使用函数名放置断点时——它会说,找不到函数名,并询问它是否是共享库的一部分。但是如果我用
\uuu\u be
假装函数名,那么它接受断点。无法理解这种行为以及这种不兼容的原因。二进制代码是使用ICC编译器为x86_64体系结构生成的。今天我了解到,在构建GDB源代码时,我们可以传递一些标志来定义它的行为。所以我想知道我正在使用的GDB 7.2.2是否有可能内置了一个不读取.gdbinit文件的选项?@DarshanL也有可能编辑GDB的源代码并引入bug。如果您使用的是GDB的修改版本,那么我们无法知道这些修改是什么。你得自己弄清楚。
stat("/home/employedrussian/.gdbinit", {st_mode=S_IFREG|0640, st_size=629, ...}) = 0
stat(".gdbinit", 0x7ffe51ef72f0)        = -1 ENOENT (No such file or directory)