2010-02-11 3 views
7

gdb가 이상하게 동작 할 수있는 gcc 옵션 목록을 얻을 수 있는지 궁금합니다.GDB로 디버깅 할 때 문제를 일으킬 수있는 GCC 옵션

물론 최적화 옵션 (예 : -O3)을 사용하면 gdb에서 이상한 동작이 발생하지만 그와 같은 영향을 줄 수있는 다른 옵션은 무엇입니까? 나는 그것을 호출 할 때 사용 should't 어떤 플래그 말을 어렵게 생각

+0

묘사하기. -ggdb를 추가 했습니까? 그리고 가장 중요한 사항 : 당신이 아직 사용하고있는 옵션을 쓰십시오. – ebo

+0

-g 및 -g3 만 사용했습니다. 제 경우의 이상한 행동은 다음과 같습니다 : 함수 정의는 654 번에서 시작하고 'n'은 765 번으로, 또 다른 'n'은 654 번으로, 4 번이나 5 번은 점프로 765는 다음에 있어야하는 것은 아닙니다 ...하지만 지금 당장이 문제를 일으키는 플래그를 찾고 있어도 이상한 동작을 더 일반적으로 일으킬 수있는 다양한 옵션이 궁금합니다. – claf

+0

나는 아직도 사용하고있는 옵션에 대해 많이 조용합니다. 질문에 게시하지 않고 대신 일반화했습니다. – claf

답변

9

는 (... 저는 현재 GDB의 MPEG2 디코더를 실행하려고하고있어 난 최적화 플래그를 제거한 후 행동에 이상한 수) 디버깅을위한 gcc. gcc docs은 기본 디버그 플래그가 -g-O2이며 -g -O0 -fno-inline을 사용하면 최적화 및 기능 인라이닝을 비활성화합니다.

내 의견으로는, 아무 것도 디버깅 프로세스를 망칠 것 같지 않다면, -g -O0 -fno-inline 플래그로 컴파일해야합니다.

GCC documentation에 명시된 바와 같이
+0

-O3 플래그, 다른 플래그 및 "-g -O0 -fno-inline"을 동시에 사용하면 어떻게됩니까? – user65636

+0

간단한 프로그램을 만들고 -O3 -g -O0 -fno-inline -S를 사용하고 -g -O0 -fno-inline -S의 동일한 출력을 가졌습니다. 그러나 -g -O0 -fno-inline -O3 -S를 사용하면 출력이 달라졌습니다.이 경우 -O3이 포함 된 어셈블리 코드는 -O3없이 생성 된 코드보다 큽니다. 나는 아직이 결과의 함의를 모르겠다. – coelhudo

+2

놀랄 일도 아니고, -O0은 첫 번째 경우에 -O3을 덮어 씁니다. gcc 맨 페이지에는 "레벨 번호의 유무에 관계없이 여러 개의 -O 옵션을 사용하면 마지막 옵션이 효과적입니다." – bug313

0

, 당신은 -OG을 사용해야합니다

-OG

최적화 디버깅 경험을. -Og는 디버깅을 방해하지 않는 최적화를 가능하게합니다. 표준 편집 - 컴파일 - 디버그주기에 적합한 최적화 수준이어야하며 빠른 컴파일과 좋은 디버깅 환경을 유지하면서 합리적인 수준의 최적화를 제공해야합니다.

또한 모든 optmization 플래그와 디버깅에 미치는 영향에 대해서도 설명합니다.

+1

원칙적으로 실제로는 '-O0'가 바람직 할 수 있습니다. –

관련 문제