调试 linux 内核时如何避免 "optimized out"

How to avoid "optimized out" when debug linux kernel

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

我已经安装了 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,值被优化掉了,

有什么想法吗?

But I can't read fd.file, the value is optimized out

调试优化代码时,这种情况经常发生。

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

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