2011-03-30 5 views
1

-g 및 -O2 플래그가있는 gdb를 사용하여 간헐적으로 단계를 건너 뜁니다. -O2 플래그를 제거하면 예상대로 작동합니다. 왜 그런 일이 일어날 지 설명 할 수 있습니까?이클립스 gdb -O2 플래그를 사용하여 이전 행으로 이동

eclipse CDT에서 gdb를 처음 사용하고 "Standard create process launcher"와 함께 C++ 코드에서 사용합니다.

예상되는 동작입니까, 아니면 최적화를 유지할 해결책이 있습니까?

답변

2

예상됩니다. 컴파일러는 높은 최적화 수준에서 코드를 다시 주문할 수 있습니다.

"어떤 최적화 옵션을 사용하지 않으면 컴파일러의 목표는 컴파일의 비용 을 줄이기 위해 디버깅 가 예상 결과를 확인하는 것입니다."남자 페이지도 말한다

그 목표는 높은 수준에서 길가에 떨어졌습니다.

2

최적화는 때로는 예기치 않은 방식으로 코드를 재 배열 할 수 있습니다. 최적화 된 코드의 디버그 정보는 이러한 재 배열을 따릅니다.

2

코드를 작성한 순서대로 코드를 정확하게 실행해야한다는 요구 사항이 없으며, "관찰 가능한 동작"결과는 동일한 경우와 동일합니다.

§1.9 : 규격에 부합하는 구현에

최소 요구 사항은 다음과 같습니다

- 휘발성 개체에 대한 액세스가 엄격 추상 기계의 규칙에 따라 평가됩니다.
- 프로그램 종료시 파일에 기록 된 모든 데이터는 추상적 의미론에 따라 프로그램을 실행했을 때 가능한 결과 중 하나와 동일해야합니다.
- 대화 형 장치의 입력 및 출력 동역학은 프로그램이 입력을 대기하기 전에 프롬프트 출력이 실제로 전달되는 방식으로 이루어져야합니다. 대화 형 장치를 구성하는 것은 구현에 따라 정의됩니다.

이러한 것들을 총체적으로 프로그램의 관찰 가능한 행동이라고합니다.

관련 문제