VSCode Fortran MPI开发调试环境配置
当前并没有充分支持Fortran+MPI的现代IDE,但借助vscode的灵活性(a.k.a. 简陋)还是可以获得比较好的Fortran开发体验的。
安装插件
这里推荐使用FORTRAN IntelliSense
和Modern Fortran
两个插件,前者主要能够提供查看定义的功能,后者主要提供调试和代码补全的功能。FORTRAN IntelliSense
还需要一个外部的Fortran Language Server
,用pip就可以很轻松的安装上。
1 | pip install fortran-language-server |
配置插件
打开File
->Preferences
->Settings
,搜索Fortran
,需要配置的地方通常有Fortran: Gfortran Executable
,这里可以输入编译器的路径或者名字。比如我使用的是PGI编译器,就填入pgfortran
即可。也可以在这个设置里修改Include Paths
。
配置编译Tasks
按下Ctrl
+Shift
+P
,输入tasks
,选择Tasks: Configure Default Build Task
,然后看到类似如下的json
配置。
1 | { |
label
取一个build
就可以了,这个名字后面要用到。command
配置为编译这个项目的命令就可以了,我的makefile
放在项目的根目录里,所以直接运行make -j20
就可以编译了。
配置GDB调试
点击最左边带一只bug的图标,然后点击create a launch.json file
,接着选C++ (GDB/LLDB)
,这里Fortran可以和C++共用GDB的配置,完事之后可以看到类似如下的配置。
1 | { |
要修改的地方首先有program
。${workspaceFolder}
指项目根目录的路径,main
是我编译出来的可执行文件的名字。也就是说我的可执行文件就会出现在根目录里。这里不同的项目可能会有不同的配置。
另外一个要改的地方是miDebuggerPath
,这里本来应该填的是gdb的路径,或者gdb这个词。但调试MPI的程序肯定不能直接gdb ./main
。通常启动gdb
的命令是mpirun -np 1 gdb ./main : -np 15 ./main
,所以我写了一个叫gdbwarp
的脚本,放在项目的scripts
文件夹里。脚本的内容如下。
最后要改的地方是preLaunchTask
,这个会让在运行调试前启动label
为build
的task,这就是实现了运行调试前自动编译的效果。
1 |
|
$(dirname $(readlink -f "$0"))
这个变量是获取脚本文件所在的绝对路径,因为gdbwarp
在根目录/script
文件夹里,所以$ROOT
变量是指项目的根目录。$ROOT/main
就是我的可执行文件。而$@
变量会接收来自vscode的参数。
启动调试
按下F5
即可启动调试,记得添加断点。最终效果如下。