Fortran 如何防止gdb在打印时出现SEGFULT,或者从中可以学到什么?
我一次又一次地犯这个奇怪的错误 变量Fortran 如何防止gdb在打印时出现SEGFULT,或者从中可以学到什么?,fortran,gdb,Fortran,Gdb,我一次又一次地犯这个奇怪的错误 变量iw的声明如下: integer iw (line 28) 我必须提到的另一件事是,我有一个print语句,仅在上面几行就可以正确执行: write(*,*) ' IW=', iw (line 89) 但几行之后,我得到: (gdb) p iw Segmentation fault (core dumped) 因此,标题中所述的问题由两部分组成:(a)我如何防止gdb在这里打印时出现SEGFULT,以及(
iw
的声明如下:
integer iw (line 28)
我必须提到的另一件事是,我有一个print语句,仅在上面几行就可以正确执行:
write(*,*) ' IW=', iw (line 89)
但几行之后,我得到:
(gdb) p iw
Segmentation fault (core dumped)
因此,标题中所述的问题由两部分组成:(a)我如何防止gdb在这里打印时出现SEGFULT,以及(b)我可以从SEGFULT中学到什么 当gdb崩溃时,它总是gdb中的一个bug。我担心当这种情况发生时,你几乎没有选择。不过,您并没有说您使用的是哪个版本的gdb,所以升级可能会有所帮助 否则,最好的办法是尝试提出一个最小的示例并提交一个bug。一个优秀的bug报告还包括来自gdb的堆栈跟踪。您可以尝试以下方法:
$ gdb --args gdb your-program
然后在外部gdb中运行内部gdb;然后调试你的程序;当内部gdb崩溃时,使用bt
获取可以在gdb bug报告中归档的堆栈跟踪
只有当您有gdb的调试符号时,这才真正有效。如果您想尝试修复gdb,最好是构建自己的gdb。我通过使用标准gdb而不是Archer分支来避免这个问题。我了解到,问题的根源在于使用数组的源代码中的一些令人不快的行。评论这些台词消除了我的问题。