当发生异常时,我想异常终止我的程序。现在,当发生异常时,会write调用带有解释语句的stop语句,然后调用语句。
我正在使用idb(intel debugger)调试程序,当异常发生时,我得到了该write语句,但idb将程序视为正常终止。我希望当异常发生时程序异常终止,以便我可以backtrace在异常发生的地方查看内存。
我尝试更改stopin stop 1,以便返回非零值,但这不起作用
编辑:
我已经在其中一个答案中实施了解决方案:
interface
subroutine abort() bind(C, name="abort")
end subroutine
end interface
print *,1
call abort()
print *,2
end
Run Code Online (Sandbox Code Playgroud)
使用此解决方案时,我在使用时仍然没有得到任何回溯ifort 13.0.1,但这与ifort 14.0.2.
我求助于使用idb而不是gdb,因为后者通常无法读取fortran.
这有非标准的扩展。Gfortran 用于backtrace()在任何地方打印回溯,对于英特尔的等价物,请参见 wander95 的回答/sf/answers/2723409881/。
在 ifort 和 gfortran 中,您可以调用abort()子例程,如果您使用-traceback(Intel) 或-g -fbacktrace(gfortran) 编译器选项,您将获得回溯。
您还abort()可以使用 C 互操作性直接调用 C。(也是非标准的,可能不适用于所有情况):
interface
subroutine abort() bind(C, name="abort")
end subroutine
end interface
print *,1
call abort()
print *,2
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |