저는 Google 결과에서 찾은 많은 튜토리얼 중 하나를 따라 gcc 및 kgdb/gdb를 사용하여 Linux 커널을 빌드하고 디버깅했습니다. 결국 나는 그것이 모두 시간낭비였다는 것을 깨달았다. -O0이나 -Og 모두 gcc 최적화 없이 커널을 컴파일할 수 없기 때문입니다. 최적화를 제거하는 구성 옵션이 없습니다. 마지막으로 Linus는 몇 년 전에 이것이 디버깅에 좋지 않다고 말했습니다.
어떤 이유로 kgdb가 반드시 존재해야 한다고 합니다. 변수/매개변수를 제거할 수 있는 방법이 있는지 궁금합니다."최적화” 한 곳에서 다른 곳으로 점프하는 대신 디버거가 코드를 순차적으로 실행하도록 하시겠습니까?
답변1
Linux 커널 소스 트리에는 제거 -O2
하거나 -O0
.
모든 컴파일 플래그를 변경하는 방법은 다음과 같습니다(Stephen Kitt에 따르면 위험할 수 있음).
cd linux
find . -name Makefile -print0 | xargs -0 sed -i 's/-O2/-O0/g'
or
find . -name Makefile -print0 | xargs -0 sed -i 's/-O2/-Og/g'
아니면 그냥 루트 Makefile로 변경하세요(이것이 더 안전합니다):
cd linux
sed -i 's/-O2/-O0/g' Makefile
or
xargs -0 sed -i 's/-O2/-Og/g' Makefile
man gcc
-Og
디버깅 목적에 유용하다고 합니다 .