【发布时间】:2017-09-06 06:15:18
【问题描述】:
我正在调试 Linux 内核。
我用 -O1 优化级别编译内核。 (注意Linux内核不能用-O0编译)。
当使用 gdb 调试它时,我发现一些值被优化了。如下图所示。 len、flags 和 add_len 参数均已优化。
如何取消优化 Linux 内核以避免优化这些变量?
【问题讨论】:
标签: gcc linux-kernel gdb
我正在调试 Linux 内核。
我用 -O1 优化级别编译内核。 (注意Linux内核不能用-O0编译)。
当使用 gdb 调试它时,我发现一些值被优化了。如下图所示。 len、flags 和 add_len 参数均已优化。
如何取消优化 Linux 内核以避免优化这些变量?
【问题讨论】:
标签: gcc linux-kernel gdb
使用-Og 构建应该可以消除这些问题。
我不知道Linux内核是否可以这样编译。
请注意,您通常可以通过向上或向下堆栈来发现“优化”值,例如如果调用者看起来像这样:
udp_recvmsg(sk, foo->msg, foo->msglen, ...);
然后在调用者中查看*foo 会告诉您len,尽管它在udp_recvmsg 本身中进行了优化。
【讨论】: