-g
옵션-g
, -ggdb
옵션을 사용해 컴파일한다.-g
옵션에 레벨이 있는데, default: -g2
-g<level> | description |
---|---|
0 | 디버깅 정보를 전혀 생성하지 않으며, -g 옵션을 안 쓴 것과 동일 = strip |
1 | backtrace를 생성할 수 있을 정도의 함수명과 외부 변수를 포함한 최소한의 정보를 생성 |
2 | 소스레벨 디버깅과 단일 단계별 코드 분석을 수행할 수 있도록, 로컬 변수, 행 번호에 대한 정보를 포함한다. |
3 | GDB가 매크로 확장(#define)을 올바르게 처리하는지에 대한 추가 정보가 포함 |
-O
컴파일 스위치를 제외해 최적화 없이 컴파일-O2
이상) 을 갖는 경우 SP를 생성하지 않는 경우가 있기 때문에 만약 -O2
로 컴파일할 수 밖에 없는 상황에서, backtrace를 해야한다면,-fno-omit-frame-pointer
를 사용해, 기본 동작을 오버라이드 해야한다.-fno-omit-frame-pointer
가 추가되어 프레임 포인터를 삭제하도록 최적화 된 코드가 있는지 살펴보자.--strip-all
: (기본 값) 모든 심볼 제거--strip-unneeded
를 사용할 것--strip-unneeded
: relocation 프로세스에 필요하지 않은 심볼 제거--strip-debug
: 디버그 심볼만 제거fork
후, 자식 프로세스를 따라 갈 수 없다!