GDB:打印Fortran子例程中传递的变量

GDB:打印Fortran子例程中传递的变量,gdb,fortran90,Gdb,Fortran90,我正在调试prog.f90,它有一个mod.f90模块。 如何打印参数变量值 该模块有一个在循环中调用的子例程。它接收参数,将一个存储在局部变量中,计算参数的新值,将其存储在另一个局部变量中,然后使用局部变量测试特定条件。参数的新值被传递回main 我试图在子例程中打印所有变量的值。 我可以打印局部变量,但打印参数变量会给我一个引用地址 (gdb)print temp_curr $1 = 4 (gdb)print arg1 $2 = (REF TO -> ( real8 )) @0x7ff

我正在调试prog.f90,它有一个mod.f90模块。 如何打印参数变量值

该模块有一个在循环中调用的子例程。它接收参数,将一个存储在局部变量中,计算参数的新值,将其存储在另一个局部变量中,然后使用局部变量测试特定条件。参数的新值被传递回main

我试图在子例程中打印所有变量的值。 我可以打印局部变量,但打印参数变量会给我一个引用地址

(gdb)print temp_curr
$1 = 4
(gdb)print arg1
$2 = (REF TO -> ( real8 )) @0x7fffffffe0a0: -nan(0x8000000000000)
我试过

(gdb)print $arg1
$3 = VOID
子例程看起来像这样

SUBROUTINE sub(arg1, arg2)
IMPLICIT NONE
REAL, INTENT(inout):: arg1, arg2
REAL               :: temp_prev, temp_curr

temp_prev = arg1

arg1 = (a bunch of calculations)/arg2

temp_curr = arg1

IF (temp_curr < temp_prev) THEN
    stop
END IF

END SUBROUTINE sub
子例程sub(arg1、arg2)
隐式无
REAL,INTENT(inout)::arg1,arg2
实时:临时上一个,临时当前
临时上一个=arg1
arg1=(一系列计算)/arg2
当前温度=arg1
如果(当前温度<当前温度),则
停止
如果结束
结束子程序

gdb中的
$arg1
变量仅用于gdb票据(请参阅)。如果引用正在调试的程序的变量,请仅使用
arg1


尝试
print MODULENAME::VARNAME
如果您想从另一个模块(MODULENAME)打印变量(VARNAME)

看起来您应该能够使用C语法解除对该变量的引用:我尝试了这一点但没有成功:
(gdb)print*((real*)ecc)无法访问地址0x3fe99999999a处的内存