在Debian系统下调试Fortran代码的核心工具与步骤
调试Fortran程序需安装Fortran编译器(如gfortran)和调试器(如GDB)。在Debian/Ubuntu系统中,可通过以下命令一键安装:
sudo apt update
sudo apt install gfortran gdb build-essential
gfortran:用于编译Fortran代码并生成可调试版本;gdb:GNU调试器,支持Fortran语言,用于程序运行时调试;build-essential:包含编译所需的依赖库(如libc-dev),避免编译错误。调试的前提是编译时包含调试符号(Debug Symbols),需在gfortran命令中添加-g参数。示例如下:
gfortran -g -o my_program my_program.f90
-g:将调试信息嵌入可执行文件(如变量名、行号、函数调用栈);-o my_program:指定输出文件名(默认为a.out);my_program.f90:Fortran源代码文件。通过以下命令启动调试会话:
gdb ./my_program
启动后进入GDB交互界面,显示GDB版本及程序信息。
(gdb) break main # 在main函数开头设置断点
(gdb) break 20 # 在当前文件第20行设置断点
(gdb) break my_subroutine # 在自定义子程序(函数)处设置断点
run后添加:(gdb) run # 无参数运行
(gdb) run arg1 arg2 # 带参数运行(arg1、arg2为实际参数)
next(简写n):执行下一行代码,跳过函数调用(不进入函数内部);step(简写s):执行下一行代码,进入函数内部(用于调试函数逻辑)。(gdb) print x # 查看变量x的当前值
(gdb) display x # 每次程序暂停时自动显示x的值(便于跟踪变量变化)
backtrace(简写bt)显示当前函数调用链,帮助定位程序崩溃的位置(如段错误)。continue(简写c)让程序从当前断点继续运行,直到下一个断点或程序结束。quit(简写q)退出调试会话。若程序因段错误(Segmentation Fault)崩溃,可生成core dump文件并通过GDB分析崩溃位置:
# 开启系统core dump生成(默认可能关闭)
ulimit -c unlimited
# 运行程序(崩溃后会生成core文件)
./my_program
# 用GDB加载可执行文件和core文件
gdb ./my_program core
# 查看崩溃时的调用栈
(gdb) bt
bt命令会显示崩溃时的函数调用链,快速定位问题代码行。
监视变量值的变化,当变量被修改时暂停程序,适用于查找变量被意外修改的问题:
(gdb) watch x # 当x的值改变时暂停程序
(gdb) rwatch x # 当x被读取时暂停程序
(gdb) awatch x # 当x被访问(读/写)时暂停程序
VSCode通过扩展可简化Fortran调试流程,步骤如下:
sudo snap install --classic code;gfortran和gdb(参考步骤1)。.vscode目录(若不存在);tasks.json文件(用于编译Fortran代码):{
"version": "2.0.0",
"tasks": [
{
"label": "Build Fortran",
"type": "shell",
"command": "gfortran -g -o ${fileDirname}/${fileBasenameNoExtension} ${file}",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
launch.json文件(用于配置GDB调试):{
"version": "0.2.0",
"configurations": [
{
"name": "Fortran Debug",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build Fortran",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
program:指定可执行文件路径(${fileBasenameNoExtension}为源文件名,不含扩展名);preLaunchTask:编译任务(对应tasks.json中的label);miDebuggerPath:GDB路径(通常为/usr/bin/gdb)。Ctrl+Shift+D);launch.json(参考上述配置);F5启动调试,程序将在断点处暂停,可使用VSCode的调试面板(单步执行、查看变量等)进行调试。通过以上步骤,可在Debian系统下高效调试Fortran代码,覆盖从基础断点到高级分析的场景。