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

时间:2013-01-24 21:59:12

标签: gdb fortran90

我正在调试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

1 个答案:

答案 0 :(得分:0)

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

如果要从其他模块(MODULENAME)打印变量(VARNAME),请尝试print MODULENAME::VARNAME