我在调试我的修改版Linux-3.11.0内核时遇到了问题。为了调试代码,我使用:
- GDB 7.6
- QEMU 1.6.5
- Linux内核3.11.0
我的系统是英特尔(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文件进行调整:gdbserver inside qemu does not stop on breakpoints ,但我无法找出工作的.config文件和我的.config文件之间的相关差异...(有太多的差异!)
请问有人能帮帮我吗?
谢谢!!