2016-10-19 6 views
2

나는 간단한 .c 파일을 가지고 :gcc -Og가 소스 코드 줄 매핑을 생성하지 않는 이유는 무엇입니까?

$ cat a.c 
int i=0; 
int j; 
static int l=4; 
void k(){} 
void main(){ 
    k(); 
} 

내가 디버그 정보를 사용하려면 "-OG"로 컴파일하기 위해 노력했다. GCC 남자가 말합니다

-Og 디버깅 환경을 최적화하십시오.
-Og는 디버깅을 방해하지 않는 최적화를 가능하게합니다.

하지만 "gdb를 a.out의"를 사용하여 "목록"을하려고 할 때, 그것은 말한다 :

(GDB) L
없음 심볼 테이블을 읽을 수 없습니다. "file"명령을 사용하십시오.

글쎄 이것은 내 기대치에 미치지 못한다. gcc a.c -g을 사용하면 "list"는 gdb에서 문제가 없다. 왜 그럴까요?

답변

3

-Og는 최적화 스위치입니다. 디버깅을 방해하지 않는 모든 최적화를 가능하게하지만 디버그 정보에 대해서는 아무 것도 말하지 않습니다.

-g는 디버그 정보 (일반적으로 별도의 비 코드 섹션 임)를 활성화합니다.

따라서 디버그 정보 및 디버그 최적화를 사용하려면 -Og -g 또는 이와 유사한 것을 사용하십시오.

-g를 사용하여 빌드하면 디버그 정보 만 활성화되지만 기본 수준에서는 최적화가 완전히 해제됩니다.

디버그 옵션에 대한 자세한 정보 "다른 최적화 옵션을 사용하지 않는 경우 -g와 함께 -Og (최적화 옵션 참조)를 사용하는 것이 좋습니다. -O 옵션이없는 경우 일부 컴파일러는 디버깅에 유용한 정보를 수집하는 것은 전혀 실행되지 않으므로 -Og은 디버깅 경험을 향상시킬 수 있습니다. "

+0

통관 주셔서 감사합니다. – Troskyvs