利用VS Code阅读源码及调试OpenFOAM 您所在的位置:网站首页 如何使用code看代码 利用VS Code阅读源码及调试OpenFOAM

利用VS Code阅读源码及调试OpenFOAM

2024-06-08 11:18| 来源: 网络整理| 查看: 265

更准确的做法应该是通过环境变量WM_COMPILE_OPTION来控制。 即在拷贝求解器后只需要修改Make/files更改一下可执行文件的路径以及名称,然后终端运行WM_COMPILE_OPTION=Debug将默认的Opt编译模式切换成Debug模式。然后wmake即可以调试模式编译求解器。

说明: 终端运行echo $WM_COMPILE_OPTION可以发现该变量的值默认为Opt, 其定义的位置在OpenFOAM的环境加载文件中(即$WM_PROJECT_DIR/etc/bashrc中), 可以取值Opt、Debug以及Prof,分别表示优化(optimised),调试(debug)和分析(profiling)。 wmake会根据变量$WM_COMPILE_OPTION的值来加载不同的选项。 $WM_PROJECT_DIR/wmake/rules/linux64Gcc/c++文件中包含语句include $(DEFAULT_RULES)/c++$(WM_COMPILE_OPTION), 分别可能加载c++Opt、c++Debug和c++Prof文件中的选项设置。这3个文件所包含的内容如下:

12345678910# $WM_PROJECT_DIR/wmake/rules/linux64Gcc/c++Optc++DBUG =c++OPT = -O3ROUNDING_MATH = -frounding-math# $WM_PROJECT_DIR/wmake/rules/linux64Gcc/c++Debugc++DBUG = -ggdb3 -DFULLDEBUGc++OPT = -O0 -fdefault-inline# $WM_PROJECT_DIR/wmake/rules/linux64Gcc/c++Profc++DBUG = -pgc++OPT = -O2

可以看到c++Debug文件中开启了-ggdb3,类似于-g选项,用于开启编译功能。 c++Prof中开启-pg选项,编译后的程序可以使用gperf之类的工具进行性能分析。 而默认的c++Opt中-O3则最大限度地优化程序。

拷贝测试算例,并通过File → Open Folder在VSCode中打开测试算例:

123456$ mkdir -p $WM_PROJECT_USER_DIR/run$ run$ cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .$ cd cavity$ pwd/home/of/OpenFOAM/of-6/run/cavity

Ctrl+Shift+D打开左侧的调试面板(Run),点击create a launch.json file创建launch.json文件

修改launch.json文件:

1234..."program": "/home/of/OpenFOAM/of-6/platforms/linux64GccDPInt32Opt/bin/myicoFoam",..."stopAtEntry": true,

program的值即为自定义求解器的路径,通过which myicoFoam获得,而stopAtEntry设为true能在main函数处默认设置一个断点。

按F1或Ctrl+Shift+p打开命令面板,然后输入C++ UI,找到C/C++ Configurations (UI),打开。在其中的includePath中添加前面得到的-I路径以及求解器源码路径(注意与前一节有点差别)。

生成网格,按F5键开始调试。

3.2 多版本调试

以上是单OpenFOAM版本,实际场景中经常会安装多个版本,通过alias在各个版本之间切换,那以上调试方法还适用吗?

通过各种尝试折腾,终于想到了一个巧妙的解决方案,即通过包装一个新的gdb脚本来实现,具体方案如下。

讨论两个版本的情况:

$HOME/.bashrc配置如下:

12alias of6=". /opt/openfoam6/etc/bashrc"alias of8=". /opt/openfoam8/etc/bashrc"

创建一个目录专门用于存放脚本,比如~/OFdebug:

1234$ mkdir -p ~/OFdebug$ cd OFdebug$ touch of6-gdb.sh && chmod +x of6-gdb.sh$ touch of8-gdb.sh && chmod +x of8-gdb.sh

两个脚本的内容分别为:

of6-gdb.sh:

123#!/bin/bash. /opt/openfoam6/etc/bashrc/usr/bin/gdb "$@" # 将脚本接受的参数传给gdb命令

of8-gdb.sh:

123#!/bin/bash. /opt/openfoam8/etc/bashrc/usr/bin/gdb "$@" # 将脚本接受的参数传给gdb命令

修改launch.json文件,通过miDebuggerPath指定编译器自定义的gdb脚本路径,比如使用of6来调试:

123..."miDebuggerPath": "/home/of/OFdebug/of6-gdb.sh",...

调试cavity算例:

123456of6 # 激活环境runcd cavityfoamCleanTutorials # 清理算例blockMesh # 生成网格# ... 开始调试 4 相关参考

在研究gdb调试之前,主要尝试的就是gdbOF[1],能方便地将求解过程中的变量导出到文件,具体应用可以看[2]的介绍。目前OpenFOAMwiki上介绍适配的最高版本是OF5.x。

gdbOF is an attachable to GNU debugger (gdb) tool that includes macros to debug OpenFOAM’s solvers and applications in an easier way.

另一个角度,[3]介绍了如何使用gdbserver调试。

使用 VS Code 调试远程服务器上的 OpenFOAM 代码。

花了不少时间折腾,写作不易,希望能帮到学习OpenFOAM的小伙伴!

ContribgdbOF 点击跳转 ↩︎

用GdbOF追踪laplacian函数在OpenFOAM中的定义过程 点击跳转 ↩︎

VSCode远程调试OpenFOAM 点击跳转 ↩︎

相关文章推荐 OpenFOAM-script:RunFunctions OpenFOAM-topoSet OpenFOAM-tutorials列表 OpenFOAM-源码文档中的图例说明 OpenFOAM-tutorials相关脚本解析 Buy me a coffee 微信 支付宝 本文作者: Yang Zhuo 本文链接: http://www.xfy-learning.com/2021/01/05/利用VS-Code阅读源码及调试OpenFOAM/ 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 欢迎关注我的其它发布渠道 WeChat RSS OpenFOAM Ansys2020R2中Fluent编译UDF简介 OpenFOAM-tutorials列表


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有