如何在调试Linux内核时避免“优化出”

问题描述:

我正在使用两台Linux虚拟机在Mac(VMWare Fusion)上调试Linux内核。如何在调试Linux内核时避免“优化出”

我已经安装kernel-debuginfo-3.10.0-327.36.3.el7.x86_64和debugStub的作品。

enter image description here

然后我添加了一个断点fchown系统调用,它打破了,

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

但我不能读fd.file,该值被优化了,

enter image description here

有什么建议吗?

+0

您应该使用较低的优化和'-g3'来构建。为了优化,使用“-O1”或“-O0”。使用'-g3'是因为它提供了最大的调试信息,包括符号常量和定义。 – jww

但我不能fd.file读取,该值被优化了

这种情况经常在调试优化的代码时。

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

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