翼度科技»论坛 云主机 LINUX 查看内容

gdbOF阅读笔记

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
前言

今天阅读了一本说明书,《gdbOF: A Debugging Tool for OpenFOAM》
受himryangzz视频启发去读相关内容,在此对himryangzz表示感谢
希望本篇文章能为需要gdb调试of的人节约时间
文章前言:

文章前言说of确实做的很不错,但调试者需要对of类的结构有较好的理解
gdbOF正是为了解决该问题而存在的,内置的一些宏可以让of调试更容易,一些数据结构类看起来更透明简单
总而言之,文章介绍说gdbOF内置的这些宏很实用
那我们看看王婆卖的什么瓜
第一章:


  • 在 WM_PROJECT DIR/etc/bashrc可设置$WM_COMPILE_OPTION为调试模式
  1. #- Optimised, debug, profiling:
  2. #    WM_COMPILE_OPTION = Opt | Debug | Prof
  3. export WM_COMPILE_OPTION=Opt
复制代码
也可这样设置为debug模式和opt模式
  1. alias of_version_debug='source /opt/openfoam_version/etc/bashrc WM_COMPILE_OPTION=Debug'
  2. alias of_version='source /opt/openfoam_version/etc/bashrc'
复制代码
installgdbOF.sh在运行时会检查是否在debug状态
可能有小伙伴发现自己的debug模式会报错,找不到一些链接库这样,这是由于apt install导致的,需要改为编译安装,类似cmake加-g也可
第二章:

讲了下用gdb怎么更好的把结果输出出来
例如书中提及的第一个指令,
  1. $(gdb) p *v@v_size
复制代码
稍微改一下就是压力场所有的数值
  1. *p.v_@p.size_:[400]
  2. [0]:7.1360554926197225e-08
  3. [1]:0.9046069230595515128
  4. [2]:9.613495251485993206
  5. [3]:9.624492714877064921
  6. [4]:9.936190016356530057
复制代码
写到这里已经可以让很多做of的人期待书内后面的内容了
书里说如果我们需要快速的提取我们想要的信息,那么就需要我们对openfoam的继承树很了解
那么就拿p下手,了解下相关继承树
gdb打印出来这样
  1. p:{..}
  2.         Foam:DimensionedField<double,Foam:VolMesh>(base):
  3.         typeName
  4.         debug:0
  5.         timeIndex:3
  6.         field0Ptr 0x0
  7.         fieldPrevIterPtr:0x0
  8.         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))

举报 回复 使用道具