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

Linux kernel 远程gdb调试不会在断点处停止,linux-kernel,operating-system,gdb,qemu,gdbserver,Linux Kernel,Operating System,Gdb,Qemu,Gdbserver,我在调试修改后的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 我使用“makemenuconfig”创建的配置文件编译了修改后的内核。(在“内核黑客”类别中进行了修改) 此处引用了一些.config文件行(我认为相关): CONFIG_DEBUG_INFO=y CONFIG_DEBUG_KERN

我在调试修改后的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

    我使用“makemenuconfig”创建的配置文件编译了修改后的内核。(在“内核黑客”类别中进行了修改)

    此处引用了一些.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\u DEBUG\u RODATA
    ,但仍然没有结果

    我试图按照这里的建议处理.config文件:但我无法找出正在工作的.config文件和我的.config文件之间的相关区别。。。(差别太大了!)

    有人能帮我吗


    谢谢

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

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

    您如何告诉qemu正在调试正在运行的内核?您在哪里设置端口“1234”?。我以前没有使用过qemu,但是如果可以的话,试着启用KGDB/KDB并通过串行链接运行内核。Qemu启动并等待gdb连接到默认端口-1234。只有当我在gdb端按continue时,Qemu才会恢复执行。所以gdb和Qemu之间的连接很好…如果你仍然在那里…你能用一个例子更新这个答案吗?这里不清楚“…只有在我连接到qemu之后,而不是在加载vmlinux之后”是什么意思。谢谢好的,这仅仅意味着您必须首先将gdb连接到qemu,然后才定义断点。。。如果您按相反的顺序操作,您将看到消息,告诉您设置了断点,但什么也不会发生,而且根本不起作用。