我有一个用gfortran
编译的Fortran程序和-fcheck=bounds
编译器选项。这会导致代码报告“数组越界”错误并随后退出。
我想使用gdb
调试我的程序以查找错误原因。不幸的是,在gdb
中,代码仍然会在出界错误时退出。
当出现越界错误时,有没有办法告诉gdb
停止执行?
答案 0 :(得分:6)
使用-g
进行编译以获取调试信息。然后,首先,我在exit
上设置了一个断点,这个工作正常,一旦程序停止,你就可以从exit
回溯到错误点。
回溯也通过一个名为_gfortran_runtime_error_at
的函数,所以你可能有更多的运气将断点放在那里,这对我有用,显然只会在你遇到运行时错误时触发。
答案 1 :(得分:1)
要在gdb
上设置断点,请使用命令break
,然后使用要调试的文件的名称,冒号以及要从中执行的行号:
break main.f90:24
将停止程序main
第24行的执行。然后,您可以使用step
命令跳转到下一行,依此类推。此时,您可以使用print
检查所需变量的值。如果已定义另一个断点,则可以使用命令next
直接跳转到下一个断点。
您需要使用-g
标记编译您的程序才能使用gdb