我已将所有CONFIG_DEBUG_
相关选项配置为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.
为什么?
答案 0 :(得分:3)
到目前为止,这是我最好的猜测:我不知道,也没关系。
我不知道为什么GDB正在打印消息“(没有找到调试符号)”。我在构建自己的内核时实际上已经看到了这一点。我将内核配置为使用调试符号,但GDB在查看内核映像时仍然会打印此消息。我从不费心去研究它,因为我的图像仍然可以调试得很好。尽管有消息,GDB仍然可以反汇编函数,添加断点,查找符号和单步执行函数。我从未注意到缺乏调试功能。我猜你也发生了同样的事情。
修改:根据您对问题的评论,您似乎在使用调试器搜索错误的符号。系统调用处理程序以sys_
的前缀开头,但您无法通过查看代码来判断。宏SYSCALL_DEFINE4(ptrace, ...)
最终会将函数声明为asmlinkage long sys_ptrace(...)
,但如果启用ftrace,它会执行其他一些疯狂的操作。
答案 1 :(得分:2)
make menuconfig-> kernel hacking-> []内核调试 - > []使用调试信息编译内核(CONFIG_DEBUG_INFO)
答案 2 :(得分:1)
当您打包vmlinuz图像时,也可以删除调试符号(当使用make-kpkg为linux内核构建deb包时)。因此,您必须使用linux源代码树下的内置vmlinux文件来获取这些调试符号。
答案 3 :(得分:0)
我可能错了,但我认为你必须为你的内核安装debuginfo包来获取符号
答案 4 :(得分:0)
将-g添加到内核Makefile中的CFLAGS变量