GDB没有接受放置在~/.gdbint和/或~/.gdbrc文件中的指令
我正在使用GDB调试我的C程序。 由于我在程序中处理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
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)