gpt4 book ai didi

fortran - 如何异常停止fortran程序

转载 作者:行者123 更新时间:2023-12-04 23:45:07 30 4
gpt4 key购买 nike

当发生异常时,我想异常终止我的程序。现在,当发生异常时,将调用带有解释性句子的write语句,然后调用stop语句。

我正在使用idb(英特尔调试器)调试程序,当发生异常时,我会收到write语句,但是idb将程序视为正常终止。我希望当异常发生时,程序会异常终止,这样我就可以在异常发生的地方使用backtrace查找内存。

我尝试更改stop中的stop 1,以便返回非零值,但这不起作用

编辑:

我已经在答案之一中实现了该解决方案:

 interface
subroutine abort() bind(C, name="abort")
end subroutine
end interface

print *,1
call abort()
print *,2
end

通过这种解决方案,当我使用 ifort 13.0.1时,我仍然没有得到任何回溯,但是这与 ifort 14.0.2完美配合。

我求助于 idb而不是 gdb,因为后者常常无法读取 fortran中可分配数组的值。

最佳答案

有非标准的扩展名。 Gfortran使用backtrace()在任何地方打印回溯记录,有关Intel的等效记录,请参阅wander95的答案https://stackoverflow.com/a/38905855/721644

在ifort和gfortran中,您可以调用abort()子例程,如果使用-traceback(Intel)或-g -fbacktrace(gfortran)编译器选项,则将获得回溯。

您还可以使用C互操作性直接调用C abort()。 (也是非标准的,可能无法在所有情况下都起作用):

  interface
subroutine abort() bind(C, name="abort")
end subroutine
end interface

print *,1
call abort()
print *,2
end

关于fortran - 如何异常停止fortran程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462371/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com