调试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内核时如何避免“优化”的主要内容,如果未能解决你的问题,请参考以下文章
Linux内存从0到1学习笔记(九,内存优化调试之一 - kswapd0)