Fortran进程异常结束
定位思路
程序正常运行,但输出结果与预期存在偏差。定位思路如
图1
所示。
图1
Fortran进程异常结束定位思路
确认问题现象是Fortran进程异常结束。
修改编译脚本或者打开调试宏开关,重新编译可调试版程序。
打开coredump开关,再次发生异常结束时生成coredump文件。
运行程序,当程序异常结束时,在指定路径确认生成coredump文件。
使用GDB调试coredump文件,定位异常结束原因。
修改相关代码,重新编译进行验证。
问题解决,则确认修改,合入原代码。
问题未解决,重新运行程序生成coredump文件进行定位。
如果缺乏定位信息,可在代码中增加定位信息,重新编译运行。
案例:野指针导致异常结束
问题现象:
某Fortran程序运行时出现异常结束。
定位过程:
使用
top
命令查看,确认程序已退出。
编译可调试版本和coredump开关,重新运行。
gdb调试coredump文件,定位到问题代码点,如下图所示。
Coredump位置操作了grb2_inq访问的一段内存地址qtt,正常流程grb2_inq会根据参数读取grb2文件内存,如果成功,则返回读取的内存地址qtt。目前来看,可能原因是grb2_inq读取失败,导致qtt为野指针。
gdb调试打印qtt的内存地址出现问题时,qtt一直为not allocated,正常情况下,应该操作qtt,会每次coredump,但是仍然会出现执行成功的情况。然而即使访问野指针失败,数据内存也不可控。
父主题:
疑难问题