远程gdb调试不会在断点处停止

时间:2013-09-21 10:51:32

标签: linux-kernel operating-system gdb qemu gdbserver

我在调试修改后的Linux-3.11.0内核时遇到问题。 为了调试代码,我使用:

  1. GDB 7.6
  2. QEMU 1.6.5
  3. Linux内核3.11.0
  4. 我的系统运行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
    

    我使用qemu和“-S”选项来启动我的内核,并使用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文件之间的相关差异...(也有差异很大!)

    有人可以帮助我吗?

    谢谢!!

2 个答案:

答案 0 :(得分:5)

好的,我发现了问题所以我在这里发帖给其他人: 显然这是一个非常微妙的程序...我的配置文件很好。我需要做的只是在连接到qemu之后定义断点,而不是在加载vmlinux之后定义断点。这些断点必须是HARDWARE断点......否则它们不会中断!

答案 1 :(得分:0)

不匹配的符号也会导致这个问题。例如:您正在从主机端 vmlinux 加载符号,这与调试对象不同。