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コードプラグイン
VS Code の公式 Web サイトにアクセスしてダウンロードしてインストールし、完了したら VS Code を開き、左側の拡張機能をクリックしてプラグインをインストールします。
名前 | 著者 | アイコン | 使用 | 設置場所 |
---|---|---|---|---|
リモート - SSH | マイクロソフト | SSHサーバーにリモート接続する | 地元 | |
C/C++ | マイクロソフト | 最新の Fortran プラグインの依存関係 | サーバ | |
モダンフォートラン | Fortran プログラミング言語 | Fortran 構文のサポート、ハイライト表示、デバッグなど。 | サーバ |
- サーバーを使用しない場合は、最後の 2 つのプラグインをローカルにインストールするだけです。
- ここではインストールが必要なプラグインのみを紹介します。その他の補助的なプラグイン ( など) については
Code Runner
、Makefile Tools
自分で調べて使用することができます。
3. SSHサーバー接続
サーバーを使用していない場合は、このセクションをスキップしてください。
Remote - SSH
プラグインをインストールすると、左側のナビゲーション バーにリモート リソース マネージャーが表示されます。- リモート リソース マネージャーを開いた後、「+」記号をクリックしてサーバーを追加します
- サーバーを追加するときは、
SSH
通常どおりコマンドを入力します。たとえばSSH -P 1233 [email protected]
、-P
の後のポート番号は指定しなくてもかまいません。
4. デバッグファイルを設定する
たとえば、フォルダーを開き、TEST_FORTRAN
このフォルダーの下に.vscode
フォルダーを作成し、.vscode
そのフォルダー内に2 つのファイルを作成launch.json
します。2 つのファイルの構成は次のとおりです。tasks.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 タスク.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
- 左側のナビゲーション バーで[実行とデバッグ]をクリックし、新しく確立されたデバッグ環境を選択し、次のように 5 行目と 9 行目にブレークポイントを追加します。
- [デバッグ]をクリックしてデバッグし、図の赤いボックス内のボタンをクリックして段階的にデバッグします (またはショートカット キーを使用します)。7 行目まで実行すると、左側で変数sumの値が次のように更新されていること
F10
がわかります。以下の図に示すように、プログラムで合計が割り当てられ、変数はInitial value のままです。a
b
1
2
c
0
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
。コンパイルする必要があるファイルと通常照合できる限り、他の記述方法も使用できます。
- 「デバッグ」ボタンをクリックすると、実行結果は次のようになります。