我在调试修改后的 Linux-3.11.0 内核时遇到问题。为了调试代码,我使用:
- GDB 7.6
- QEMU 1.6.5
- Linux 内核 3.11.0
我的系统有 Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz 运行 Ubuntu 12.10
我使用“make menuconfig”创建的配置文件编译了修改后的内核。(在“内核黑客”类别中进行了修改)
这里引用了一些 .config 文件行(我认为相关):
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
我使用带有“-S”选项的 qemu 来引导我的内核,并使用 gdb 连接到 qemu 并恢复它的执行:
(gdb) target remote :1234
(gdb) continue
设置断点时,例如:
break schedule
我收到一条确认消息,例如:
Breakpoint 1 at 0xffffffff81736400: file kernel/sched/core.c, line 2509.
所以直到这里一切似乎都很好!
问题是 gdb 和 qemu 不会在断点处停止!他们都只是继续运行......
我尝试按照某些地方的建议设置硬件断点,但收到以下消息:
No hardware breakpoint support in the target.
这很奇怪,因为我设置了 CONFIG_HAVE_HW_BREAKPOINT 。
我也CONFIG_DEBUG_RODATA
按照其他地方的建议取消设置,但仍然没有结果......
我试图按照这里的建议弄乱 .config 文件:qemu 内部的 gdbserver 不会在断点处停止,但我无法弄清楚工作 .config 文件和我的 .config 文件之间的相关差异......(也有差别很大!)
谁能帮帮我吗?
谢谢你!!