2013-09-21 4 views
2

У меня возникли проблемы с отладкой моего модифицированного ядра Linux-3.11.0. Для отладки кода, я использую:Удаленная отладка gdb не останавливается на контрольных точках

  1. GdB 7,6
  2. QEMU 1.6.5
  3. ядро ​​Linux 3.11.0

Моя система имеет i7 Intel (R) ядро ​​(TM) -2760QM CPU @ 2.40GHz running 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 

Я использую 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. не

I также снята с охраны CONFIG_DEBUG_RODATA как предложено в других местах, но до сих пор не найдено ...

Я пытался возиться с файлом .config, как предложено здесь: gdbserver inside qemu does not stop on breakpoints, но я не мог понять, соответствующие различия между рабочим файлом .config и моим файлом .config ... (Слишком много различий!)

Может ли кто-нибудь мне помочь?

спасибо!

+0

Как вы сообщаете qemu, что запущенное ядро ​​отлаживается? Где вы устанавливаете порт «1234»?. Я раньше не использовал qemu, но, если можно, попробуйте включить KGDB/KDB и запустить ядро ​​по последовательной ссылке. – srd

+0

Я использую флаги -s и -S. Qemu запускается и ждет, пока gdb подключится к порту по умолчанию - 1234. Только когда я нажимаю continue на стороне gdb, Qemu возобновляет выполнение. Таким образом, связь между gdb и Qemu прекрасна ... – Noamiko

ответ

4

ОК, я нашел проблему, поэтому я размещаю здесь для других людей: Видимо, это очень деликатная процедура ... Мой конфигурационный файл был в порядке. Все, что мне нужно было сделать, это определить точки останова только после подключения к qemu, а не после загрузки vmlinux. Эти точки останова должны быть ПРАВИЛЬНЫМИ точками останова ... иначе они не сломаются!

+1

Если вы все еще там ... можете ли вы обновить этот ответ на примере? Здесь неясно, что «... только после того, как я подключился к qemu, а не после загрузки vmlinux». Благодаря! – larsks

+0

Ну, это просто означает, что вам сначала нужно подключить gdb к qemu и только затем определить точки останова ... Если вы сделаете это в обратном порядке - вы увидите сообщения, сообщающие вам, что точки останова установлены, но ничего произойдет, и это просто не сработает. – Noamiko

+0

@Noamiko Привет, У меня очень похожая проблема, но я не использую удаленный gdb Я нахожусь на моей машине VM, и gdb не останавливается на контрольных точках что мне делать? – user1993748

Смежные вопросы