Похоже, у вас фундаментальное непонимание того, как работают системы UNIX.
Подумай об этом. Предположим, вы смогли войти в функцию ядра, реализующую системный вызов, скажем, sys_open
. Итак, теперь вы просматриваете исходный код ядра для sys_open
в отладчике. Вопрос в том, работает ли ядро в этот момент или оно остановлено. Поскольку вы захотите сделать что-то вроде next
в отладчике, давайте предположим, что ядро остановлено.
Итак, теперь вы нажимаете клавишу n
, и что происходит?
Обычно ядро реагирует на прерывание, вызванное клавиатурой, выясняет, какая клавиша была нажата, и отправляет эту клавишу нужному процессу (тому, который заблокирован в read(2)
с терминала, имеющего управление клавиатуры).
Но ваше ядро остановлено, поэтому вам не нужно нажимать клавиши.
Вывод: отладка ядра через отладчик, запущенный на той же машине, невозможна.
На самом деле, когда люди отлаживают ядро, они обычно делают это, запуская отладчик на другой машине (это называется удаленной отладкой).
Если вы действительно хотите перейти к ядру, проще всего это сделать с помощью UML.
После того, как вы поигрались с UML и поняли, как работает и взаимодействует интерфейс пользовательского пространства/ядра, вы можете попробовать kgdb
, хотя установка обычно немного сложнее. На самом деле вам не нужно иметь для этого отдельную машину, вы можете использовать VMWare, VirtualPC или VirtualBox.
person
Community
schedule
14.05.2011
ptrace(2)
;ptrace
может только проверять и останавливать процессы, запущенные в пространстве пользователя. Я ожидаю, что механизм отладки процессов FreeBSD аналогичен и предназначен только для работы с процессами пользовательского пространства: поскольку ядро ОС будет захватывать и снимать блокировки, а также быстро реагировать на прерывания, разработка ядра, позволяющего полнофункциональную отладку из пользовательского пространства, кажется слишком сложной. вряд ли. - person sarnold   schedule 14.05.2011