1. 准备工作:安装必要工具
在Ubuntu上调试Fortran程序前,需安装GDB调试器和Fortran编译器(如gfortran)。通过以下命令安装:
sudo apt update
sudo apt install gdb gfortran
确保工具版本为最新,以支持最新的Fortran语法和调试功能。
2. 编译时添加调试信息
调试的核心是包含源代码级调试信息,编译时需添加-g选项。例如,对于main.f90文件:
gfortran -g -o my_program main.f90
-g选项会将变量名、行号、函数结构等信息嵌入二进制文件,使GDB能映射机器指令到源代码。
3. 使用GDB进行核心调试
GDB是Ubuntu下最常用的Fortran调试工具,以下是关键操作步骤:
gdb ./my_program
break my_subroutine(my_subroutine为子程序名);break main.f90:10(在第10行设置断点)。run
若程序需要命令行参数,可追加:run arg1 arg2。next(或n):执行下一行代码,不进入子程序;step(或s):执行下一行代码,进入子程序(查看子程序内部逻辑)。print(或p)命令查看变量当前值,例如:print i # 查看变量i的值
print array(1:5) # 查看数组array的前5个元素
backtrace(或bt)命令显示函数调用链,帮助定位问题发生的函数层级。continue(或c)命令让程序继续运行,直到下一个断点或程序结束。quit(或q)命令退出调试器。4. 检查内存问题:Valgrind
Fortran程序常见的内存问题包括内存泄漏、数组越界等,可使用Valgrind工具检测:
valgrind --leak-check=full ./my_program
--leak-check=full选项会详细报告未释放的内存块及位置,帮助修复内存错误。
5. 可选工具:LLDB调试器
LLDB是LLVM项目的调试器,支持Fortran(需用gfortran或ifort编译)。基本用法与GDB类似:
lldb ./my_program;breakpoint set --name my_subroutine;run;frame variable my_variable(frame variable替代GDB的print)。6. 辅助调试技巧
cppcheck或clang-tidy检查代码潜在错误(如未初始化变量、数组越界),编译前运行:cppcheck --enable=all main.f90
write(*,*)语句输出关键变量值和程序流程,例如:write(*,*) "Entering subroutine my_subroutine, i=", i
日志可帮助快速定位问题发生的代码段。