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即可启动调试,记得添加断点。最终效果如下。
