2016-09-14 70 views
2

我有以下的Fortran 95代碼:GDB和Fortran模塊

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 

然後我跑使用GDB 7.7.1程序,我設置一個斷點到第11行,(DO i = 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 

我期望輸出,但6.9533558074105031e-310由GDB打印。請注意,子程序PROBLEM正確打印所有值。

爲什麼會發生這種情況,如何正確使用GDB打印值A(1, 1)

+1

'警告:源文件比可執行文件更新.'通常不好。這意味着可執行文件沒有被調試器重新載入,或者你編譯過的文件改變了源代碼。 –

+0

那是因爲我在複製粘貼之前用VIM對它進行了創建。請注意,StackOverflow需要一個附加的TAB將其作爲代碼進行檢測。保存,重新編譯並再次設置調試器後,問題仍然存在。 – MrParrot

+0

我在Debian sid x86_64系統上看不到使用gdb 7.11.1和gfortran 6.2.0的這種行爲。也許你可以具體說明你正在使用哪個版本的gdb和gfortran。 –

回答

0

我將我的GDB版本從7.7.1更新爲7.11.1,問題消失了。