6

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

  1. GDB 7.6
  2. QEMU 1.6.5
  3. 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 文件之间的相关差异......(也有差别很大!)

谁能帮帮我吗?

谢谢你!!

4

2 回答 2

7

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

于 2013-09-23T11:37:07.803 回答
0

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

于 2021-03-11T04:34:01.793 回答