!!!!!方法一: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 。
按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这个不是编译安装,编译安装见本文第一个链接。
当报错缺少这些链接库的时候,解决方法是以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)介绍 | 小肥羊吃草不吃肉