|
前言
今天阅读了一本说明书,《gdbOF: A Debugging Tool for OpenFOAM》
受himryangzz视频启发去读相关内容,在此对himryangzz表示感谢
希望本篇文章能为需要gdb调试of的人节约时间
文章前言:
文章前言说of确实做的很不错,但调试者需要对of类的结构有较好的理解
gdbOF正是为了解决该问题而存在的,内置的一些宏可以让of调试更容易,一些数据结构类看起来更透明简单
总而言之,文章介绍说gdbOF内置的这些宏很实用
那我们看看王婆卖的什么瓜
第一章:
- 在 WM_PROJECT DIR/etc/bashrc可设置$WM_COMPILE_OPTION为调试模式
- #- Optimised, debug, profiling:
- # WM_COMPILE_OPTION = Opt | Debug | Prof
- export WM_COMPILE_OPTION=Opt
复制代码 也可这样设置为debug模式和opt模式- alias of_version_debug='source /opt/openfoam_version/etc/bashrc WM_COMPILE_OPTION=Debug'
- alias of_version='source /opt/openfoam_version/etc/bashrc'
复制代码 installgdbOF.sh在运行时会检查是否在debug状态
可能有小伙伴发现自己的debug模式会报错,找不到一些链接库这样,这是由于apt install导致的,需要改为编译安装,类似cmake加-g也可
第二章:
讲了下用gdb怎么更好的把结果输出出来
例如书中提及的第一个指令,稍微改一下就是压力场所有的数值- *p.v_@p.size_:[400]
- [0]:7.1360554926197225e-08
- [1]:0.9046069230595515128
- [2]:9.613495251485993206
- [3]:9.624492714877064921
- [4]:9.936190016356530057
复制代码 写到这里已经可以让很多做of的人期待书内后面的内容了
书里说如果我们需要快速的提取我们想要的信息,那么就需要我们对openfoam的继承树很了解
那么就拿p下手,了解下相关继承树
gdb打印出来这样- p:{..}
- Foam:DimensionedField<double,Foam:VolMesh>(base):
- typeName
- debug:0
- timeIndex:3
- field0Ptr 0x0
- fieldPrevIterPtr:0x0
- boundaryField_
复制代码 这东西不能多看,看多了精神容易出问题
我们之前博客也提过p是volScalarFiel类,构造方法是这样的
[code]template Foam::GeometricField::GeometricField ( const IOobject& io, const Mesh& mesh ) : Internal(io, mesh, dimless, false), timeIndex_(this->time().timeIndex()), field0Ptr_(nullptr), fieldPrevIterPtr_(nullptr), boundaryField_(mesh.boundary()) { readFields(); // Check compatibility between field and mesh if (this->size() != GeoMesh::size(this->mesh())) { FatalIOErrorInFunction(this->readStream(typeName)) |
|