在我使用的程序中,有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.
答案 0 :(得分:3)
您可以随时通过调用gfortran中的子例程backtrace()
和英特尔Fortran中的tracebackqq()
来获取回溯(另请参阅how to stop a fortran program abnormally的答案)。这些是编译器特定的。我不知道任何标准解决方案,也不知道这两个编译器至少是常见的解决方案。