2016-09-14 6 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)になります。その後、Iは行列Aの最初の要素を出力Iが得る出力は、次のとおり

(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 

Iは出力を期待するが、6.9533558074105031e-310 GDBにより印刷されます。サブルーチンPROBLEMはすべての値を正しく出力することに注意してください。

なぜこのようなことが起こり、A(1, 1)の値をGDBで正しく印刷できますか?

+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にアップデートしたところ、問題は消えました。

関連する問題