Главная » Ядро Linux » Использование отладчика gdb

0

Для того, чтобы мельком  заглянуть внутрь работающего ядра можно  использовать стандартный отладчик GNU.  Запуск отладчика для работы с  ядром почти ни чем не  отличается от  отладки выполняющегося процесса.

gdb vmlinux /proc/kcore

Файл vmlinu x — это декомпрессированный исполняемый образ ядра, который хранится в  корне каталога исходных кодов, где  выполнялась сборка выполняющегося ядра. Сжатые файлы zlmage, или bzlmage использовать нельзя.

Опциональный  параметр /proc/kcor e  исполняет роль файла core, чтобы позволить отладчику читать из памяти выполняющегося  ядра. Чтобы иметь возможность читать этот файл,  необходимо иметь права пользователя root.

Можно пользоваться практически всеми командами программы gdb  для чтения информации. Например, чтобы напечатать значение переменной можно восполбзо ваться командой.

р global_variable

Для того, чтобы дизассемблировать код функции  можно выполнить следующую команду.

disassemble function

Если ядро было скомпилировано с  указанием флага -g (необходимо добавить -g к значению переменной CFLAGS  в  файле Makefil e  ядра), то  отладчик gdb   сможет выдавать больше информации.  Например,  можно выводить дампы структур данных и разыменовывать указатели. При этом также получается ядро значительно большего  размера, поэтому для обычной работы не следует компилировать ядро с  отладочной информацией.

К сожалению, на этом заканчиваются возможности использования отладчика gdb. С его  помощью никак нельзя изменять данные ядра. Нет возможности пошагово выполнять код  ядра, или устанавливать точки остановки (breakpoint). Невозможность изменять  структуры данных ядра —  это большой недостаток. Хотя очень полезно

иметь  возможность дизассемблировать код  функций, еще  более  полезной была  бы возможность  изменять  структуры данных.

Отладчик kgdb

Отладчик kgdb —это  заплата ядра,  которая  позволяет с  помощью  отладчика gdb отлаживать ядро  по  линии последовательной передачи. Для  этого  требуется  два компьютера. На  перпом выполняется ядро  с заплатой kgdb.  Второй  компьютер используется  для  отладки ядра  по  линии последовательной передачи (нуль-модемный кабель, соединяющий две  машины)  с  помощью gdb.  Благодаря  отладчику kgdb  полностью доступен весь  набор   функций gdb:  чтение и  запись любых  переменных, установка точек  остановки, установка точек  слежения (watch  points), пошаговое исполнение и др..  Специальные версии kgdb даже  позволяют вызывать функции.

Установка kgdb  и  линии последовательной передачи несколько  сложная процедура, но  если  ее  выполнить, то  отладка  ядра  значительно упрощается. Заплата ядра также  устанавливает большое количество документации в каталог   Documentation/ , ее  следует  прочитать.

Несколько  человек выполняют поддержку заплаты kgdb  для  различных аппаратных  платформ и версий ядра.  Поиск в Интернет — наилучший способ найти необходимую  заплату  для  заданного ядра.

Отладчик kdb

Альтернативой kgdb  является  отладчик kdb.  В  отличие от  kgdb  отладчик kdb — не  удаленный отладчик.  Отладчик kdb — это  заплата, которая сильно модифицирует ядро  и  позволяет выполнять отладку  прямо на  той  же  машине, где  выполняется ядро.   Кроме всего  прочего поддерживается возможность изменения  переменных, установки точек  остановки и  пошаговое выполнение.  Выполнять отладку  просто  — необходимо нажать  на  консоли клавишу break .  При  выводе   сообщения oops  переход в отладчик выполняется  автоматически. Более  подробная документация доступна в каталоге Documentation/kd b после  применения заплаты. Заплата kdb доступна в  Интернет по  адресу  http://oss.sgi.com/ .

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии