Linux服务器VSCode配置Fortran调试环境

Linux服务器VSCode配置Fortran调试环境

使用VS Code编写Fortran程序时,一直不太会使用调试功能,都是在各个位置使用print打印结果。为了提高工作效率,研究了下如何配置Fortran调试环境,为此看了不少博客,在这里做下笔记和总结。

注:最初是为了M1芯片Mac配置Fortran调试环境写的这篇博客,但M1芯片不支持gdb,而lldb作为调试工具无法正常查看中间变量的数值,所以对于M1芯片Mac,目前无法使用VSCode正常搭建Fortran调试环境。

1. Fortran环境

本文使用的是Intel出的ifort编译器,对于gcc中的gfortran编译器也是可行的。

2. VS Code插件

前往VS Code官网下载安装,完成后,打开VS Code,点击左侧扩展,安装插件。

名称 作者 图标 用途 安装位置
Remote - SSH Microsoft Linux服务器VSCode配置Fortran调试环境_第1张图片 远程连接SSH服务器 本地
C/C++ Microsoft Linux服务器VSCode配置Fortran调试环境_第2张图片 Modern Fortran插件依赖项 服务器
Modern Fortran The Fortran Programming Language Linux服务器VSCode配置Fortran调试环境_第3张图片 Fortran语法支持、高亮、调试等 服务器
  • 如果不使用服务器,只需在本地安装后两个插件;
  • 此处仅介绍了必须安装的插件,对于其他辅助类插件如Code RunnerMakefile Tools等,可自行摸索使用。

3. SSH服务器连接

不使用服务器可跳过本节。

  • 安装好Remote - SSH插件后,左侧导航栏会多出一个远程资源管理器
  • 点开远程资源管理器后,点击"+"号添加服务器
  • 服务器添加时,正常输入SSH命令即可,如SSH -P 1233 [email protected],其中-P后为端口号,可以不指定。

4. 配置调试文件

打开文件夹,如TEST_FORTRAN,在该文件夹下建立.vscode文件夹,在.vscode文件夹新建launch.jsontasks.json两个文件,两个文件的配置如下:

4.1 launch.json

本文件大多数情况下使用如下配置即可。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cppdbg",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}",
            "args": [],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "build"
        }
    ]
}

type : 指定调试编译器
name : 左侧运行和调试窗口显示的配置名
program : Fortran生成的可执行文件绝对路径
preLaunchTask : 调试运行前执行的命令,命令标签build在tasks.json文件中配置

4.2 tasks.json

用来配置调试前执行的命令,以及调试窗口部分参数。此处使用的配置如下

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "ifort",
            "args": [
                "-g",
                "${fileDirname}/${fileBasename}",
                "-o",
                "${workspaceFolder}/${fileBasenameNoExtension}"
            ]
        }
    ]
}

label : 对应launch.json中preLaunchTask设置的标签
type : 此处使用shell类型
command : 调用终端时执行的命令
args : 执行command时传递的参数

  • -g : 启用调试
  • ${fileDirname}/${fileBasename} : 单个for文件编译;多个for文件编译时,修改为*.f*
  • -o : 输出可执行文件
  • ${workspaceFolder}/${fileBasenameNoExtension} : 输出可执行文件的名称,${fileBasenameNoExtension}表示使用被调试文件去除后缀的名称。(注意:此处可执行文件的名称需要与launch.json文件中program设置的参数相匹配)

5. 测试

5.1 单个文件调试

  • Test_Fortran文件夹下新建test01.f90文件,写入如下内容
program name
    implicit none
    real a,b,c

    a = 1.0
    b = 2.0
    c = 3.0

    print *,a,b,c
end program name
  • 点击左侧导航栏中运行和调试,选择刚建立的Debug调试环境,并在第5行和第9行添加断点,如下

  • 点击Debug进行调试,点击图中红框按钮进行逐步调试(或使用快捷键F10),运行至第7行时,可以在左侧看到变量ab的数值已更新为程序中赋值的12,变量c仍为初始值0,如下图所示

Linux服务器VSCode配置Fortran调试环境_第4张图片

5.2 多个文件调试

  • 新建test02.f90,编写子例程如下
subroutine test_add(a, b, c)
    real, intent(in) :: a,b
    real, intent(out) ::  c

    c = a + b
    
    return
end subroutine test_add
  • 修改test01.f90,调用test02.f90中的test_add,如下
program name
    implicit none
    real a,b,c

    a = 1.0
    b = 2.0
    
    call test_add(a,b,c)

    print *,a,b,c
end program name
  • 修改tasks.json文件,使其支持同时编译多个文件,修改后如下
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "ifort",
            "args": [
                "-g",
                "${fileDirname}/*.f*",
                "-o",
                "${workspaceFolder}/${fileBasenameNoExtension}"
            ]
        }
    ]
}

使用*.f*是为了匹配后缀为.f90.for的文件,也可使用其他的书写方式,能够正常匹配需要编译的文件即可。

  • 点击Debug按钮,运行结果如下

Linux服务器VSCode配置Fortran调试环境_第5张图片

你可能感兴趣的:(linux,vscode)