GDB和Fortran模块

GDB和Fortran模块,fortran,gdb,Fortran,Gdb,我有以下Fortran 95代码: MODULE ISSUE IMPLICIT NONE CONTAINS SUBROUTINE PROBLEM(A) IMPLICIT NONE DOUBLE PRECISION, DIMENSION(:,:), INTENT(INOUT) :: A INTEGER :: i, n n = SIZE(A, 2) DO i = 1, n

我有以下Fortran 95代码:

MODULE ISSUE
    IMPLICIT NONE
    CONTAINS
    SUBROUTINE PROBLEM(A)
        IMPLICIT NONE
        DOUBLE PRECISION, DIMENSION(:,:), INTENT(INOUT) :: A
        INTEGER :: i, n

        n = SIZE(A, 2)

        DO i = 1, n
            PRINT *, A(i, 1:n)
        ENDDO

    END SUBROUTINE PROBLEM
END MODULE ISSUE

PROGRAM TEST
    USE ISSUE
    IMPLICIT NONE
    DOUBLE PRECISION, DIMENSION(5, 5) :: A

    A = TRANSPOSE(RESHAPE((/ 1, 2, 3, 4, 5, & 
                             6, 7, 8, 9, 0, &
                             1, 2, 3, 4, 5, &
                             6, 7, 8, 9, 0, &
                             1, 2, 3, 4, 5/), SHAPE(A)))
    CALL PROBLEM(A)
END PROGRAM TEST
现在我使用

gfortran -g -O0 problem.f95 -o problem
然后我使用gdb7.7.1运行程序,并将断点设置为第11行(
doi=1,n
)。之后,我打印矩阵A的第一个元素。我得到的输出是:

(gdb) break 11
Breakpoint 1 at 0x4008c5: file problem.f95, line 11.
(gdb) run
Starting program: /path_to_problem_folder/problem 

Breakpoint 1, issue::problem (a=...) at problem.f95:11
warning: Source file is more recent than executable.
11              DO i = 1, n
(gdb) p A(1, 1)
$1 = 6.9533558074105031e-310
我希望输出1,但6.9533558074105031e-310由gdb打印。请注意,子例程
问题
正确打印所有值


发生这种情况的原因以及如何使用GDB正确打印值
A(1,1)

我将GDB版本从7.7.1更新到7.11.1,问题消失了。

警告:源文件比可执行文件更新。
通常不好。这意味着调试器没有重新加载可执行文件,或者您编译后在源代码中更改了内容。这是因为在复制粘贴之前,我用VIM识别了它。请注意,StackOverflow需要一个常规选项卡将其作为代码进行检测。保存、重新编译并再次设置调试器后,问题仍然存在。在Debian sid x86_64系统上使用gdb 7.11.1和gfortran 6.2.0时,我没有看到这种行为。也许您可以具体说明您正在使用哪些版本的gdb和gfortran。