!!!!!方法一:VScode中用GDB调试C/C++程序(作者推荐这个简单可视化易操作,opt模式就行。不用以Debug模型编译Openfoam,首选)

方法二、直接借助GDB用来DebugOpenfoam,以Opt模式就可以。(方法一不行的话就选这个)

方法三、终端中下载gdbOF软件,用GDB icoFoam调试C/C++程序(必须以Debug模型编译Openfoam,这个比较麻烦不推荐,万不得已或者有需要再选))

方法一、VScode中(借助OFextension插件)用GDB调试C/C++程序(大家都用这个方法,巨好用)

主要按照下面这个链接操作:

OFextension - Visual Studio Marketplace

这个是一个作者已经写好的脚本,比较方便快捷,不用再配置lanch.json文件

注意按照链接里面在vscode中按Ctrl+P,然后输入下面这个安装ofextension插件

ext install ZhuoYang.ofextension

然后在插件设置中指定OpenFOAM和gdb的路径 (Settings-> Extensions: OFextension中的OFpath和GDBpath);

务必确保在OFpath中正确指定了自己的OpenFOAM路径。如果不需要调试,就不用管GDBpath 。

vscode配置使用opencv_blastfoam

按F1或Ctrl+Shift+P打开命令面板,搜索并运行ofInit命令; 运行ofInit命令

再按照这个视频操作就可以成功了。

VS Code的OpenFOAM插件(OFextension)演示_哔哩哔哩_bilibili

最后调试是在求解器界面,blastFoam.C文件里面按F5,就打开debug界面了。

至此,实现可以阅读源码跳转以及debug调试程序。

tip1(作者易错,对于blastfoam2.0.0的问题):blastfoam2.0.0中的make/file文件的路径不是绝对路径,只在

(base) jie@dell:~/myapp/OpenFOAM-7/blastfoam_2_0/applications/solvers$ ls
blastFoam  jie  myblastFoam

目录下修改求解器才有效。如果想把myblastFoam文件夹换到别的地方,需要修改 

(base) jie@dell:~/myapp/OpenFOAM-7/blastfoam_2_0/applications/solvers/myblastFoam/Make/options

里面的代码路径,就是前面这个几个点。修改../../../     将位置定位到/home/jie/myapp/OpenFOAM-7/blastfoam_2_0/src/adaptiveFvMesh/lnInclude

EXE_INC= \
    -I../../../src/equationOfState/lnInclude \
    -I../../../src/compressibleSystem/lnInclude \
    -I../../../src/timeIntegrators/lnInclude \
    -I../../../src/adaptiveFvMesh/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude

如果报错关于 

lastFoam.C:37:10: fatal error: phaseCompressibleSystem.H: 没有那个文件或目录
   37 | #include "phaseCompressibleSystem.H"

就是这个原因,修改路径重新wmake生成myblastfoam求解器即可。 

tips2:如果修改文件夹后,再debug这个程序会报错,因为目录结构发生了变化(比如案例debug_case的结构),这时候很简单,重新再vscode按F1,然后输入ofinit初始化案例,然后再按F5用来debug即可成功。(亲测有效)

tips3:可以在vscode中下载OFextension插件,从而实现
代码跳转
  • 语法高亮与鼠标悬浮提示
  • 调试

方法二、直接借助GDB用来DebugOpenfoam,以Opt模式就可以

下面方法成功调试blastFoam: of9 cd ~/myapp/OpenFOAM-9/blastfoam/tutorials/blastFoam/internalDetonation/internalDetonation blockMesh  setRefinedFields  gdb blastFoam 这时候会提示没有No debugging symbols found in blastFoam然后在internalDetonation目录(案例文件夹)下执行run命令,就可以debuginternalDetonation这个案例。

同理,这个方法也可以用在服务器端。而不用编写自己的求解器再debug了。

自己的例子:调试爆轰案例流固耦合:

成功方法: opt模式 一个终端开Solid 另一个将precice-config.xml复制到Fluid文件夹下,然后执行完runFluid(不确定用不用,最好先执行一遍),然后执行blastfoam,然后ctrl+c取消运行,即可调试。

方法三、用gdbOF软件调试C/C++程序

前提条件:Openfoam在Debug模式下编译成功。

1.主要下载gdbOF的.tar.gz版本,里面有安装方法 https://openfoamwiki.net/index.php?title=Contrib_gdbOF   2安装Gdb OF方法:

3.使用手册如下:

https://openfoamwiki.net/images/1/18/GdbOF-Manual.pdf

 一、编译安装debug模式下的Openfoam

调试openfoam之前,首先要安装debug模式下的Openfoam,安装方法可参照我的这篇博客:

1.编译安装Openfoam:

Compiling OpenFOAM from Source Code | OpenFOAM

2.以Debug模式编译openfoam

二、易错的地方:

1.发现自己的debug模式下wmake会报错,找不到一些链接库这样,

是由于OpenFoam的Debug模式没有编译成功。apt install openfoam这个不是编译安装,编译安装见本文第一个链接。

vscode配置使用opencv_vscode配置使用opencv_02

当报错缺少这些链接库的时候,解决方法是以debug模式下成功编译Openfoam就会解决。

2.编译求解器如myicoFoam的时候,不能将Make/file文件的EXE改为LIB

虽然找到那些库了。但是运行失败,因为生成的是so库文件,不是可执行文件,在调试的时候无法执行,找不到可执行文件)

3.判断是否正确处于debug模式的技巧:

输入which icoFoam,

   若弹出的是

/home/jie/myapp/OpenFOAM-v2212/platforms/linux64GccDPInt32Opt/bin/icoFoam

说明还处于opt模式,

    改成Debug模式后,若是弹出空的

说明openfoam编译的有问题,没有debug模式的icoFoam求解器

正确弹出的应该如下:/home/jie/myapp/OpenFOAM-v2212/platforms/linux64GccDPInt32Debug/bin/icoFoam

4.判断Debug模式的Openfoam有没有编译成功

正常来说:

~/myapp/OpenFOAM-v2212/platforms/linux64GccDPInt32Opt

下面有bin和lib两个文件夹,两个文件里面有很多的可执行文件(如icoFoam)和库文件(icoFoam.so)。

现在~/myapp/OpenFOAM-v2212/platforms/linux64GccDPInt32Debug里面啥也没有,说明Debug模式的Openfoam没有编译成功,编译好若出现上面这些文件说明才安装正确。

5:编译openfoam报错wmake mpi /home/jie/anaconda3/bin/mpicc: 行 323: x86_64-conda-linux-gnu-cc: 未找到命令报错

原因:/usr/local/openmpi/bin/mpicc和/home/jie/anaconda3/bin/mpicc都有mpicc,是 Anaconda 环境中的mpi与 OpenFOAM 的编译环境不兼容。

解决方法:由于知道export PATH=/usr/local/openmpi/bin:$PATH下面的mpi版本是兼容的。这里在执行Allwmake之前先在终端执行export PATH=/usr/local/openmpi/bin:$PATH,这样就成功解决了。

问题1:在安装./installgdbOF.sh报错找不到有限元和openfoam库

解决方法:Openfoam没有在Debug模式下编译成功。上面有编译方法。

问题2:如何vscode生成task、launch.json文件。

解决方法,在终端里,cd到要打开的文件夹,使用code .命令就可生成task、launch.json。如果不能生成,使用ofinit,然后选定debug_case后就可以生成json文件

可参照视频链接操作即可:VS Code的OpenFOAM插件(OFextension)演示_哔哩哔哩_bilibili

问题3:$(LIB_SRC)是什么

$(LIB_SRC)是一个环境变量,在OpenFOAM中等同于$(FOAM_SRC),其真实的位置可以通过键入echo $FOAM_SRC来查看。

三、gdbOF总结:

要想正常使用gdbof,务必在Debug模式下完整编译OpenFOAM,不然应该会报错一些链接库的错误,找不到有限元和openfoam库。 方法:到openfaom安装目录,先将./etc/bashrc下面的Opt改成Debug模式,然后allwmake -j79即可。目前成功。

OpenFOAM通过源码编译安装时有三个模式可以选择  

,即$WM_COMPILE_OPTION=Opt|Debug|Prof。 其中Opt是默认的模式,其编译过程会调用编译器优化,最终得到的程序体积相对更小,执行效率相对也最高。Debug模式则会包含更多额外的信息用于调试查看,因此在此模式下编译最终得到的程序体积最大,执行效率也更低。Prof模式编译的程序可用于性能分析,相比Opt的程序也需要引入额外开销。 通过系统自带的包管理器(比如Ubuntu的apt)安装的OpenFOAM一般都是在Opt模式下编译得到然后打包的。 我们正常编译安装也是如此(自己编译安装是可以控制该选项的!可以得到特定模式下的程序,因此更自由!)。

注1:要想正常使用gdbof,务必在Debug模式下完整编译OpenFOAM。而vscode和gdb只需要opt模式就可以。 注2:gdbof源码中需要自行修改部分路径才能正常使用 注3:VSCode自带的debug console在gdb交互上体验不是很好,要想正常使用gdbof,可以在Debug模式下编译求解器后,直接在终端调用gdb <solvername>启用调试。

参考链接:

VS Code的OpenFOAM插件(OFextension)介绍 | 小肥羊吃草不吃肉