【问题标题】:How to de-optimize the Linux kernel to avoid value optimized out如何对 Linux 内核进行去优化以避免价值被优化出来
【发布时间】:2017-09-06 06:15:18
【问题描述】:

我正在调试 Linux 内核。

我用 -O1 优化级别编译内核。 (注意Linux内核不能用-O0编译)。
当使用 gdb 调试它时,我发现一些值被优化了。如下图所示。 lenflagsadd_len 参数均已优化。
如何取消优化 Linux 内核以避免优化这些变量?

【问题讨论】:

    标签: gcc linux-kernel gdb


    【解决方案1】:

    使用-Og 构建应该可以消除这些问题。

    我不知道Linux内核是否可以这样编译。

    请注意,您通常可以通过向上或向下堆栈来发现“优化”值,例如如果调用者看起来像这样:

    udp_recvmsg(sk, foo->msg, foo->msglen, ...);
    

    然后在调用者中查看*foo 会告诉您len,尽管它在udp_recvmsg 本身中进行了优化。

    【讨论】:

    • 非常感谢您的回复。我使用 -Og 优化级别。但是这些变量仍然被优化了。我尝试使用“volatile”来声明这些变量,然后它们没有被优化出来。
    猜你喜欢
    • 2018-01-20
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2018-09-09
    • 2022-07-01
    • 2019-11-17
    • 2011-10-22
    相关资源
    最近更新 更多