2017-02-23 1 views
0

Code :: Blocks를 사용하여 gfortran으로 일부 숫자 코드를 컴파일 중입니다. 실행 파일에는 Debug와 Release라는 두 가지 버전이 있습니다.디버깅 할 때 gfortran/gdb가 다른 숫자 결과를 생성하는 이유는 무엇입니까?

  • 디버그 컴파일 플래그 : -Jobj\Debug\ -Wall -g -c
  • 출시 컴파일 플래그 : -Jobj\Release\ -Wall -O2 -c
  • gdb를 invokation 플래그 : -nx -fullname -quiet -args

내가 일반적으로 코드를 실행 두 릴리스 및 디버그 실행 파일이 동일한 출력을 생성 . 그러나 gdb에 코드를 실행하면 출력이 달라집니다. 이것은 실행 중 다른 결과를 산출하는 수치 계산으로 인한 것 같습니다.

예를 들어, gdb에서 실행될 때 계산 한 결과는 7.93941842553643E-06이고 정상적으로 실행되면 1.71006041855278E-03이됩니다. 더욱 기이하게도, 0이 아닌 결과 중 일부는 배정도 정확도 내에서 동일합니다.

gdb을 사용하여 실행했을 때 출력이 동일한 지 어떻게 확인할 수 있습니까? gdb를 사용할 때 다른 유형의 수치 계산 또는 평가가 기본적으로 사용됩니까?

+0

버그와 정의되지 않은 동작을 제거해야합니다. 어느 것? 누가 코드를 보지 않고 누가 알겠습니까? –

+0

원래의 질문을 편집하여 gdb를 사용하여 코드를 실행할 때 숫자 값을 계산하는 방식의 차이로 인해 나타나는 동작이 있다고 생각한다는 사실을 반영합니다. –

+0

그러면 계산은 어떻게 생겼습니까? –

답변

1

이것은 수치 계산이 실행 중에 다른 결과를 나타내는 것으로 나타납니다. GDB는 프로그램이 실행 어떤 수치 계산에 참여하지 않습니다 심히 가능성이

.

프로그램이 초기화되지 않은 메모리를 사용하고 프로그램이 GDB에서 실행될 때 메모리가 다른 값을 가질 가능성이 훨씬 높습니다.

valgrind으로 지원되는 플랫폼을 사용하는 경우 가장 먼저 수행해야 할 단계는 프로그램을 실행하고 찾은 모든 버그를 수정하는 것입니다.

관련 문제