调试技巧
- 添加边界检查代码:在访问数组元素的地方添加额外的代码,检查索引是否在有效范围内。例如,对于数组
A
,在访问 A(i)
之前,添加如下代码:
if (i < 1 .or. i > size(A)) then
print *, '数组越界,索引 i = ', i
stop
end if
- 使用打印语句:在程序中关键的数组操作位置添加打印语句,输出数组索引值以及相关变量的值。例如,在数组赋值语句
A(i) = ...
前打印 i
的值,以便观察索引是否超出合理范围。
print *, '当前数组索引 i = ', i
A(i) = ...
调试工具
- gdb(GNU 调试器)
- 启动调试:编译 Fortran 程序时添加调试信息(例如
gfortran -g your_program.f90 -o your_program
),然后使用 gdb your_program
启动调试。
- 设置断点:在可能发生数组越界的代码行处设置断点,如
break your_file.f90:line_number
,其中 your_file.f90
是源文件名,line_number
是具体行号。
- 运行程序:使用
run
命令运行程序,当程序停在断点处时,使用 print
命令查看数组索引变量的值,判断是否越界,如 print i
。
- Intel Fortran Debugger (IFORT debugger)
- 编译选项:使用 Intel Fortran 编译器编译程序时添加调试选项(例如
ifort -g your_program.f90 -o your_program
)。
- 启动调试:运行
ifortdbg your_program
启动调试器。
- 设置观察点:可以针对数组变量设置观察点,当数组被访问或修改时,调试器会暂停。例如,设置观察点
watch A
,这样当 A
数组相关操作发生时,就可以查看索引等信息,判断是否越界。