Noa*_*iko 4 gdb operating-system qemu linux-kernel gdbserver
调试修改后的Linux-3.11.0内核时遇到问题.为了调试代码,我使用:
我的系统有运行Ubuntu 12.10的Intel(R)Core(TM)i7-2760QM CPU @ 2.40GHz
我使用'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
Run Code Online (Sandbox Code Playgroud)
我使用qemu和"-S"选项来启动我的内核,并使用gdb我连接到qemu并恢复它的执行:
(gdb) target remote :1234
(gdb) continue
Run Code Online (Sandbox Code Playgroud)
设置断点时,例如:
break schedule我收到一条确认消息,例如:
Breakpoint 1 at 0xffffffff81736400: file kernel/sched/core.c, line 2509.
Run Code Online (Sandbox Code Playgroud)
所以到这里一切似乎都很好!
问题是gdb和qemu不会在断点处停止!他们都只是继续跑......
我尝试按照某些地方的建议设置硬件断点,但是我收到了消息:
No hardware breakpoint support in the target.
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我设置了CONFIG_HAVE_HW_BREAKPOINT.
我也CONFIG_DEBUG_RODATA像其他地方的建议一样,但仍然没有结果......
我试图乱用.config文件,如下所示:qcmu中的gdbserver不会在断点上停止,但我无法弄清楚工作.config文件和我的.config文件之间的相关差异......(也有差异很大!)
谁能帮帮我吗?
谢谢!!
好的,我发现了问题,所以我在这里张贴给其他人:显然这是一个非常微妙的程序...我的配置文件很好.我需要做的只是在连接到qemu之后定义断点,而不是在加载vmlinux之后定义断点.这些断点必须是HARDWARE断点......否则它们不会破坏!