花大哥 发表于 2023-2-27 22:47:26

gdbOF阅读笔记

前言

今天阅读了一本说明书,《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怎么更好的把结果输出出来
例如书中提及的第一个指令,
$(gdb) p *v@v_size稍微改一下就是压力场所有的数值
*p.v_@p.size_:
:7.1360554926197225e-08
:0.9046069230595515128
:9.613495251485993206
:9.624492714877064921
: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类,构造方法是这样的
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))
页: [1]
查看完整版本: gdbOF阅读笔记