# Fortran进程异常结束

#### 定位思路

程序正常运行，但输出结果与预期存在偏差。定位思路如图1所示。

图1 Fortran进程异常结束定位思路

1. 确认问题现象是Fortran进程异常结束。
2. 修改编译脚本或者打开调试宏开关，重新编译可调试版程序。
3. 打开coredump开关，再次发生异常结束时生成coredump文件。
4. 运行程序，当程序异常结束时，在指定路径确认生成coredump文件。
5. 使用GDB调试coredump文件，定位异常结束原因。
6. 修改相关代码，重新编译进行验证。
7. 问题解决，则确认修改，合入原代码。
8. 问题未解决，重新运行程序生成coredump文件进行定位。
  如果缺乏定位信息，可在代码中增加定位信息，重新编译运行。


#### 案例：野指针导致异常结束

问题现象：

某Fortran程序运行时出现异常结束。

定位过程：

1. 使用top命令查看，确认程序已退出。
2. 编译可调试版本和coredump开关，重新运行。
3. gdb调试coredump文件，定位到问题代码点，如下图所示。
4. Coredump位置操作了grb2_inq访问的一段内存地址qtt，正常流程grb2_inq会根据参数读取grb2文件内存，如果成功，则返回读取的内存地址qtt。目前来看，可能原因是grb2_inq读取失败，导致qtt为野指针。
5. gdb调试打印qtt的内存地址出现问题时，qtt一直为not allocated，正常情况下，应该操作qtt，会每次coredump，但是仍然会出现执行成功的情况。然而即使访问野指针失败，数据内存也不可控。
