Fortran显示调用子例程的位置

时间:2017-11-03 10:25:51

标签: fortran

在我使用的程序中,有subroutine open(name,reclen,etc)以标准化方式打开文件。

程序使用大量磁盘IO有多种原因,而且在某处写入的文件经常在不同的子程序中打开多次。

是否有可能在子程序中打印出当前路径?

类似

subroutine open()
  call print_path()
end subroutine

会打印类似堆栈跟踪的内容而不会导致程序被删除:

this instance of open() was called at:

program     line routine/program/function
=========================================
calc        157  subrout1.f90
calc        112  parentrout.f90
calc         20  calc.f90
The opened file here has the name ABC.txt

因此,在这个例子中,我知道文件ABC.txt已在第{157}行的subrout1中打开了,该文件在parentrout中的calc行在{{1}}行的{{1}}处被调用了20.

1 个答案:

答案 0 :(得分:3)

您可以随时通过调用gfortran中的子例程backtrace()和英特尔Fortran中的tracebackqq()来获取回溯(另请参阅how to stop a fortran program abnormally的答案)。这些是编译器特定的。我不知道任何标准解决方案,也不知道这两个编译器至少是常见的解决方案。