在 Ubuntu 下调试 Fortran 程序,常见做法是编译时加调试信息 + 用调试器(gdb),也可以配合一些辅助工具。下面按“从入门到常用”的顺序说明。
通常 Ubuntu 自带 gfortran,如果没有:
sudo apt update
sudo apt install gfortran
sudo apt install gdb
(可选)带界面的调试器:
sudo apt install ddd
# 或
sudo apt install nemiver
gfortran -g -O0 -o test test.f90
说明:
-g:生成调试信息-O0:关闭优化(否则变量可能被优化掉,调试困难)-O2 -O3 来调试如果是多文件:
gfortran -g -O0 main.f90 sub.f90 -o app
gdb ./test
| 功能 | 命令 |
|---|---|
| 设置断点 | break 行号 或 break 子程序名 |
| 运行 | run |
| 单步(不进函数) | next |
| 单步(进函数) | step |
| 查看变量 | print 变量名 |
| 查看调用栈 | backtrace |
| 继续运行 | continue |
| 退出 | quit |
program main
integer :: i, s
s = 0
do i = 1, 10
s = s + i
end do
print *, s
end program main
调试:
gdb ./test
(gdb) break 5
(gdb) run
(gdb) print i
(gdb) next
real :: a(10)
gdb 中:
print a(1)
print a(1:5)
如果变量在 module 中:
print modulename::variable
如果出现:
No symbol "x" in current context
一定是忘了 -O0 -g
sudo apt install valgrind
valgrind ./test
适合:
gfortran -Wall -Wextra -fcheck=all -g -O0 test.f90
-fcheck=all 会检查:
gdb-oneapigfortran -g -O0 -Wall -Wextra -fcheck=all -o app app.f90
gdb ./app
如果还怀疑内存问题:
valgrind ./app
如果你愿意,可以把:
发出来,我可以帮你具体定位调试问题。