读取变量 segmentation fault
-
case
test.zip -
曾经,我排过一个很狗血的错,一台电脑的某个软件也是这样捉摸不定的出错,不知道在哪里,也没有一点点防备。找了半天发现是磁盘满了。还剩一丢丢空间,所以一开软件,这个空间什么时候被临时文件占满了,就崩了。错误特征完全无法捉摸。
这个,可以
du -h
看看各挂载点的空间。然后,开两个窗口。一个开top
,监视内存;一个开求解器,看内存的实时占用,不过有捕捉不到的风险。可以把网格尽量缩小再试试。这些变量占的空间基本都依托于网格。还有一个点,这两个错误都跟 thermo 有关。thermo好像也和湍流有关
https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1ThermalDiffusivity.html -
@bestucan 感谢老师的回复。我先一个一个排除一下可能的错误。
找了半天发现是磁盘满了。还剩一丢丢空间,所以一开软件,这个空间什么时候被临时文件占满了,就崩了。错误特征完全无法捉摸。
这个,可以du -h
看看各挂载点的空间。然后,开两个窗口。一个开top
,监视内存;一个开求解器,看内存的实时占用,不过有捕捉不到的风险。可以把网格尽量缩小再试试。这些变量占的空间基本都依托于网格。我查看了一下,看到还有250+GB的空间,而且我的网格数从100✖100✖200减少到5✖5✖10都存在一样的错误,或许可以初步排查是内存的问题。
还有一个点,这两个错误都跟 thermo 有关。thermo好像也和湍流有关
我想请问一下老师,是怎么发现这两个错误和thermo有关系的,我不是很明白。
因为我下面有一个是输出mu的值,而所需要的ρ是从thermo里读取到的,mu输出的值正确也是不能保障thermo指针正确吗。
turbulence引用的时候需要thermo,如果我把turbulence的定义放在thermo后一个,就可以正确读取turbulence。放到后面几个就读取错误了。我先去看一下老师说的监视内存的方法,看具体是什么情况。感谢老师。
-
@hongjiewang 第二个错误信息我看错了,确实不是都和thermo有关。
可是你的第二个错误你说 g 出的错,Info<< "Need to store rho for ddt(rhoCp, U)\n" << endl;
这一句后面只跟一个 “1”,在代码里不是这里么
Info<< "1" << endl;
#include "createMRF.H"
#include "createFvOptions.H"Info<< "1" << endl;
#include "readGravitationalAcceleration.H"createMRF.H 或者 creat FvOptions.H
输出第二个“1”才到g
250的网格都错,和内存无关了。这种面向对象的程序一般写的时候都有脚手架,就像官网的代码有很多框图,但又比那些框图要详细。这留个窟窿那钻个眼都有用,可是只看代码非常费功夫才知道有什么用。不知道有什么用就很容易错。互相之间的依赖关系,先后顺序。那些不报错的是没语法错误了,不一定没语义错误。所以一般都在原有的类似的求解器上增删改;改变结构造个新的,还是挺麻烦的。of的路慢慢熬吧。
如果还不行,用gdb调试,有gdb的of版,gdbof
-
@bestucan 在 读取变量 segmentation fault 中说:
Info<< "1" << endl;
#include "createMRF.H"
#include "createFvOptions.H"Info<< "1" << endl;
#include "readGravitationalAcceleration.H"输出第二个“1”才到g
这里我看串行了,确实不是到g变量。我还是尝试一下gdb调试吧~有结果的话和各位老师分享~
感谢老师~ -
@bestucan 请问我重新编译of的时候,提示错误而终止了,这是什么原因奥~
step1:修改etc/bashrc中的OPTION为Debug
step2:在对应版本的openfoam终端下 source etc/bashrc
step2:.Allwmake -jstate/lumpedPointState.C: In constructor ‘Foam::lumpedPointState::lumpedPointState(const pointField&, const vectorField&, Foam::quaternion::eulerOrder, bool)’: state/lumpedPointState.C:154:49: error: expected ‘;’ before ‘exit’ 154 | << angles_.size() << " angles" << nl | ^ | ; 155 | exit(FatalError);
是在154行nl后添加;就可以了吗
-
@hongjiewang 我也编译过 debug 模式的 of ,就是比正常慢点,没出现过这种错误。这种错误看起来很初级不像是源代码带的。我搜我的代码的这个文件也没这句。
单这个错误,是的,加个分号就行。就是一个语句忘了结尾。
-