Debian上Fortran程序调试指南
在Debian系统上调试Fortran程序,核心流程是通过gfortran编译时生成调试信息,再使用GDB(GNU调试器)进行源代码级别的调试。以下是详细步骤和常见操作:
首先确保系统已安装gfortran(Fortran编译器)和gdb(调试器)。若未安装,可通过以下命令安装:
sudo apt-get update
sudo apt-get install gfortran gdb
使用gfortran编译Fortran程序时,必须添加-g选项,该选项会在可执行文件中嵌入调试信息(如源代码行号、变量名),使GDB能关联程序运行状态与源代码。例如:
gfortran -g -o my_program my_program.f90
其中my_program.f90是源代码文件,my_program是生成的可执行文件。
在终端中输入以下命令启动GDB并加载可执行文件:
gdb ./my_program
启动后,GDB会进入交互式命令行界面,显示程序的基本信息(如文件名、函数列表)。
break(或简写b)命令,后跟行号。例如在第10行设置断点:(gdb) break 10
calculate_sum函数开头暂停:(gdb) break calculate_sum
run(或简写r)命令。若程序需要命令行参数(如input.txt),可附加参数:(gdb) run input.txt
step(或简写s)命令。例如进入calculate_sum函数内部:(gdb) step
next(或简写n)命令。例如跳过printf函数的执行,直接到下一行:(gdb) next
print(或简写p)命令,后跟变量名。例如查看变量x的值:(gdb) print x
arr的第3个元素:(gdb) print arr(3)
backtrace(或简写bt)命令。例如查看程序崩溃时的函数调用顺序(从主函数到崩溃点):(gdb) backtrace
continue(或简写c)命令。例如从当前断点继续执行,直到遇到下一个断点或程序结束:(gdb) continue
delete命令,后跟断点编号(可通过info breakpoints查看)。例如删除编号为1的断点:(gdb) delete 1
若需在满足特定条件时暂停程序(如循环中i=5时暂停),可使用break命令的条件形式:
(gdb) break 20 if i == 5
上述命令表示在第20行设置断点,仅当变量i的值等于5时触发。
用于监控变量的变化(如变量x的值被修改时暂停),使用watch命令:
(gdb) watch x
当x的值发生改变时,GDB会暂停程序并显示修改前后的值。
list(或简写l)命令。例如显示当前行及前后5行:(gdb) list
(gdb) list 15
若偏好图形界面,可使用Visual Studio Code(VSCode)配合gdb调试Fortran程序:
launch.json:创建.vscode/launch.json文件,添加以下内容(指定可执行文件路径和GDB路径):{
"version": "0.2.0",
"configurations": [
{
"name": "Fortran Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/my_program",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build Fortran"
}
]
}
tasks.json:创建.vscode/tasks.json文件,定义编译任务(生成带调试信息的可执行文件):{
"version": "2.0.0",
"tasks": [
{
"label": "Build Fortran",
"type": "shell",
"command": "gfortran -g -o ${fileDirname}/${fileBasenameNoExtension} ${file}",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
F5键,VSCode会自动编译程序并通过GDB启动调试会话,支持断点、单步执行、变量查看等功能。通过上述步骤,可在Debian系统上高效调试Fortran程序,快速定位语法错误、逻辑错误或运行时异常(如数组越界、空指针引用)。