我按照 Google 结果中找到的众多教程之一使用 gcc 和 kgdb/gdb 构建和调试 Linux 内核。我最终发现这都是浪费时间。因为如果没有 gcc 优化 -O0 和 -Og 都无法编译内核。没有用于删除优化的配置选项。最后但同样重要的是,Linus 多年前就说过这不利于调试。
说 kgdb 由于某种原因必须存在。我想知道是否有办法摆脱变量/参数”优化掉”并让调试器按顺序单步调试代码而不是从一个地方跳到另一个地方?
答案1
Linux 内核源代码树有 Makefile(实际上有很多),其中包含您正在查找的所有标志,包括-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
有利于调试目的。