2016-09-14 3 views
2

나는 다음과 같은 포트란 95 코드를 한 : 나는 내가 GDB 7.7.1를 사용하여 프로그램을 실행하고 나는 중단 점을 설정 그리고 GDB와 포트란 모듈

gfortran -g -O0 problem.f95 -o problem 

를 사용

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 

이제 컴파일 라인 11, (DO i = 1, n). I 출력 1 기대

(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에 의해 인쇄된다 : 그 후, I는 행렬 A의 첫 번째 요소 I는 얻을 출력을 출력한다. 서브 루틴 PROBLEM은 모든 값을 올바르게 인쇄합니다.

왜 이런 일이 발생하며 GDB를 사용하여 A(1, 1) 값을 올바르게 인쇄 할 수 있습니까?

+1

경고 : 소스 파일이 실행 파일보다 최근입니다 .' 일반적으로 좋지 않습니다. 실행 파일이 디버거에 의해 다시로드되지 않았거나 소스에서 변경된 사항을 컴파일했다는 의미입니다. –

+0

복사하기 전에 VIM으로 식별했기 때문입니다. StackOverflow에는이를 코드로 감지하기 위해 추가 TAB이 필요합니다. 디버거를 저장, 다시 컴파일 및 설정 한 후에도 문제가 지속됩니다. – MrParrot

+0

데비안 sid x86_64 시스템에서 gdb 7.11.1 및 gfortran 6.2.0을 사용하여이 동작을 볼 수 없습니다. 아마도 gdb 및 gfortran의 버전을 사용하고 있는지 여부를 구체적으로 설명 할 수 있습니다. –

답변

0

내 GDB 버전을 7.7.1에서 7.11.1로 업데이트했는데 문제가 사라졌습니다.