
私は、Googleの結果で見つけた多くのチュートリアルの1つに従って、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
デバッグ目的に役立ちます。