调试linux内核时如何避免“优化”

Posted

技术标签:

【中文标题】调试linux内核时如何避免“优化”【英文标题】:How to avoid "optimized out" when debug linux kernel 【发布时间】:2018-01-20 13:55:34 【问题描述】:

我正在使用两个 Linux 虚拟机在 Mac (VMWare Fusion) 上调试 Linux 内核。

我已经安装了 kernel-debuginfo-3.10.0-327.36.3.el7.x86_64 并且 debugStub 工作正常。

然后我在fchown 系统调用上添加了一个断点,它中断了,

Breakpoint 10, SYSC_fchown (group=0, user=0, fd=<optimized out>) at fs/open.c:650

但是我看不懂fd.file,值被优化掉了,

有什么想法吗?

【问题讨论】:

您应该使用较低的优化和-g3 构建。对于优化,请使用-O1-O0。使用-g3,因为它提供了最大的调试信息,包括符号常量和定义。 您找到解决方案了吗?我目前正在调试在虚拟机上运行的代码并遇到了这个问题。 【参考方案1】:

但是我无法读取fd.file,值被优化出来了

这在调试优化代码时经常发生。

您最好的选择可能是disassemble 例程。对于像这样的小例程,通常不难判断值在哪个寄存器中,然后您可以转换为正确的类型。例如。如果值在$r9:

(gdb) p *(struct file *)$r9

【讨论】:

以上是关于调试linux内核时如何避免“优化”的主要内容,如果未能解决你的问题,请参考以下文章

JLinkGDBServer调试ARM linux内核

Linux内存从0到1学习笔记(九,内存优化调试之一 - kswapd0)

如何调试 Linux 内核模块 `init()` 中的问题?

linux内核调试工具之kprobe

Linux 内核参数优化

linux内核调试的主要方法