Monday, April 02, 2012

Использование отладчика GDB по максимуму

В нашей повседневной работе, как и всем, требуется много пользоваться отладчиком. В силу специфики работы: (разработка ОС, использование технологий виртуализации наподобие Intel-VT, ит.д.) нам часто требуется использовать отладчик для работы со специфическими случаями: отладка кода загрузчика ядра, отладка загрузчиков виртуальных машин, а так же в принципе обеспечение возможности отлаживать ОС собственной разработки. Именно эти особые случаи так пафосно названы в заголовке ”по максимуму”. 

Для решения всех этих задач (и конечно, многих других) мы используем gdb. Возможно использование и таких оболочек как DDD, но лично я предпочитаю использовать cgdb как оптимальный выбор, особенно для случая работы с отладчиком по ssh.
В этой статье мы расскажем о том, как можно использовать gdb для отладки кода загрузочных секторов и загрузчиков.

В начале разработки любой новой ОС, требуется обеспечить и наличие банального загрузчика для этой ОС. «Правда жизни» разработчика ОС заключается в первую очередь в том, что процессор начинает выполнять код загрузочного сектора срезу после BIOS Post в Real Mode. На этот момент никакой ОС еще не загружено (только 512 байт загрузочного сектора), в то время как для полноценной поддержки отладчика нам требуется реализация особого модуля в ядре ОС (об этом подробнее в части 2). Возникает вопрос: как же отлаживать код бут-сектора и загрузчика? Ведь до начала работы с основным отладчиком ОС (через специальный модуль) необходимо провести загрузку в оперативную память “загрузчика системы”, загрузку ядра и его базовых модулей, базовую инициализацию аппаратуры (для работы с gdb нужен по крайней мере Serial Port), и только потом работа с полноценным отладчиком ОС становится возможной. 
Решить эту проблему можно, как оказывается, довольно просто: нужно начать загрузку ОС внутри какой-нибудь виртуальной машины, которая поддерживает встроенные функции отладки. 

В качестве примера приведем описание использования qemu:

1. Запускаем виртуальную машину (для примера используется простая загрузка ОС с дискеты):

qemu -fda ./boot.fdd -s -S -vnc none &

(Запускаем qemu виртуальную машину, которая будет загружаться с дискеты, образ которой находится в файле “./boot.fdd”; “-s –S” означает, что машина запустится в приостановленном режиме и в режиме отладки; “-vnc none” означает, что машина запустится без активного терминала (то есть, в фоновом режиме – особенно удобно при работе через ssh, да и для отладки загрузчика и бут сектора видеть экран компьютера редко требуется); “&” — запускаем виртуалку в фоновом режиме).

2. Теперь, запускаем сам отладчик gdb:
$ gdb

Read more: Habrahabr.ru
QR: Inline image 1

Posted via email from Jasper-Net