为什么在使用gdb和/proc/kcore时,我的vmlinux中没有调试符号?

为什么在使用gdb和/proc/kcore时,我的vmlinux中没有调试符号?,gdb,linux-kernel,Gdb,Linux Kernel,我已将所有CONFIG\u DEBUG\u相关选项配置为y,但当我尝试调试内核时,它显示未找到调试符号: gdb /usr/src/linux-2.6.32.9/vmlinux /proc/kcore Reading symbols from /usr/src/linux-2.6.32.9/vmlinux...(no debugging symbols found)...done. 为什么?我可能错了,但我认为您必须为内核安装debuginfo包才能获得符号。这是我目前为止的最佳猜测:我不知

我已将所有
CONFIG\u DEBUG\u
相关选项配置为
y
,但当我尝试调试内核时,它显示未找到调试符号:

gdb /usr/src/linux-2.6.32.9/vmlinux /proc/kcore

Reading symbols from /usr/src/linux-2.6.32.9/vmlinux...(no debugging symbols found)...done.

为什么?

我可能错了,但我认为您必须为内核安装debuginfo包才能获得符号。这是我目前为止的最佳猜测:我不知道,也没关系

我不知道GDB为什么要打印消息“(没有找到调试符号)”。实际上,我在构建自己的内核时看到了这一点。我将内核配置为使用调试符号,但GDB在查看内核映像时仍会打印此消息。我从不费心去研究它,因为我的图像仍然可以很好地调试。尽管有这样的消息,GDB仍然可以反汇编函数、添加断点、查找符号和单步执行函数。我从未注意到缺少调试功能。我猜同样的事情也发生在你身上


编辑:根据您对问题的评论,您似乎在使用调试器搜索错误的符号。系统调用处理程序以前缀
sys\uu
开头,但您无法通过查看代码来判断。宏
SYSCALL\u DEFINE4(ptrace,…)
最终将函数声明为
asmlong sys\u ptrace(…)
,但如果您启用了它,它会做一些其他疯狂的事情。

make menuconfig->kernel hacking->[]内核调试->[]使用调试信息编译内核(CONFIG\u debug\u info)

将-g添加到内核Makefile中的CFLAGS变量中

当您打包vmlinuz映像时,调试符号也可能被剥离(当使用make kpkg为linux内核构建deb包时)。因此,您必须在linux源代码树下使用构建的vmlinux文件来获得这些调试符号。

您能否验证您的
.config
文件是否包含
config\u debug\u INFO=y
行?是的,我已经验证了很多次。您是否编译自己的内核,调试发行版打包的内核?是的,我正在编译自己的内核,但是到目前为止还没有调试符号…在GDB中,
(GDB)b fs/open.c:10的输出是什么?不,我想我已经安装了这个包:
CONFIG\u debug\u INFO=y
,OP不是说他已经安装了吗?“我已将所有配置调试相关选项配置为y”