在Debian系统上调试Fortran程序前,需安装Fortran编译器(gfortran)和调试工具(GDB)。通过以下命令完成安装:
sudo apt-get update sudo apt-get install gfortran gdb gfortran:用于编译Fortran程序(生成可执行文件);gdb:GNU调试器,用于调试生成的可执行文件。调试的前提是编译时包含调试符号(Debug Symbols),需在gfortran编译命令中添加-g选项。示例如下:
gfortran -g -o my_program my_program.f90 -g:将调试信息嵌入可执行文件(如变量名、行号、函数调用关系);-o my_program:指定输出的可执行文件名;my_program.f90:Fortran源文件(可根据实际扩展名调整,如.f)。通过GDB加载生成的可执行文件,启动调试:
gdb ./my_program 进入GDB后,会显示调试提示符(gdb),表示已准备好进行调试。
GDB的核心功能通过命令行实现,以下是调试Fortran程序的常用命令:
断点是暂停程序执行的关键,可在函数名或行号处设置:
break main # 在main函数开头设置断点 break 10 # 在源文件的第10行设置断点 break my_subroutine # 在自定义子程序my_subroutine处设置断点 使用run命令启动程序,可传递命令行参数:
run # 无参数运行 run arg1 arg2 # 传递参数arg1、arg2 程序将从main函数开始执行,遇到断点时暂停。
next(或n):执行下一行代码,不进入函数内部(适用于跳过库函数调用);step(或s):执行下一行代码,进入函数内部(适用于调试函数逻辑)。print 变量名(或p 变量名):打印指定变量的当前值;print array(1:5):打印数组array的前5个元素(适用于Fortran数组);info locals:查看当前作用域内的所有局部变量。list(或l):显示当前执行位置附近的源代码(默认显示5行);list 20,30:显示第20至30行的源代码;list my_subroutine:显示子程序my_subroutine的源代码。continue(或c):继续执行程序,直到遇到下一个断点或程序结束。backtrace(或bt):显示函数的调用堆栈(从当前函数到main函数),帮助定位崩溃位置;frame N:切换到堆栈的第N层(如frame 2),查看对应函数的局部变量。set variable 变量名 = 新值(或set var 变量名 = 新值):修改变量的值(如set var x = 10),用于测试不同输入下的程序行为。当满足特定条件时触发断点,减少不必要的暂停:
break 20 if x > 100 # 当变量x大于100时,在第20行暂停 适用于循环或大数据量的调试场景。
x/4xw &array(1):以16进制格式查看数组array首地址开始的4个字(word)内存内容(适用于底层内存调试)。若程序崩溃生成core文件(如core.dump),可使用GDB加载分析:
gdb ./my_program core 通过backtrace命令查看崩溃时的调用堆栈,定位问题根源。
假设调试一个名为hello.f90的Fortran程序,步骤如下:
gfortran -g -o hello hello.f90;gdb ./hello;break main;run;next(查看每行代码的执行效果);print message(假设程序中有message变量);continue(直到程序结束)。通过以上步骤,可在Debian系统上高效地调试Fortran程序,定位语法错误、逻辑错误或运行时错误(如数组越界、除零错误)。GDB的命令行方式虽需记忆,但灵活且功能强大,适合各类调试场景。