Примечание: использование GDB позволяет удобно наблюдать за процессом работы rCore, но не является требованием учебного курса.
Для отладки rCore с помощью GDB необходимо, чтобы GDB поддерживал архитектуру riscv64.
gdb --configuration
, чтобы узнать, какие архитектуры поддерживает локальный GDB, где параметр --target
указывает на архитектуру, которую он может отлаживать.Если GDB не поддерживает нужную архитектуру, можно выполнить следующие шаги для установки riscv64-unknown-elf-gdb
:
riscv64-unknown-elf-gdb
Установите зависимости (для Linux и macOS могут возникнуть ошибки, которые нужно будет исправить):
sudo apt-get install libncurses5-dev python python-dev texinfo libreadline-dev
Перейдите на сайт Зеркала Tsinghua и загрузите последнюю версию исходного кода GDB.
Распакуйте исходный код и перейдите в каталог.
Выполните следующую команду:
--prefix
— путь установки, который по этой команде будет установлен в /usr/local/bin/
--with-python
— адрес python2, он и --enable-tui
нужны для поддержки последующей установки визуального плагина, что не обязательно.mkdir build
cd build
../configure --prefix=/usr/local --with-python=/usr/bin/python --target=riscv64-unknown-elf --enable-tui=yes
Скомпилируйте и установите:
# Linux
make -j$(nproc)
# macOS
make -j$(sysctl -n hw.ncpu)
sudo make install
(Необязательно) Установите плагин gdb-dashboard
, чтобы улучшить опыт отладки.
wget -P ~ https://git.io/.gdbinit
В файле os/Makefile
есть метод debug
, который можно запустить с помощью команды make debug
, чтобы открыть отладчик в tmux.
Вручную:
-s -S
к параметрам запуска QEMU, чтобы он ждал подключения отладчика на порту 1234.riscv64-unknown-elf-gdb
.file target/riscv64imac-unknown-none-elf/debug/os
, чтобы загрузить символы из ядра без использования strip
.target remote localhost:1234
, чтобы подключиться к QEMU и начать отладку.b <имя функции>
устанавливает точку останова при входе в функцию, например, b rust_main
или b os::memory::heap::init
.cont
продолжает выполнение.n
выполняет следующую строку кода, не входя в функцию.ni
выполняет следующую инструкцию (если это инструкция перехода, то выполняется до возврата).s
выполняет следующую строку кода и входит в функцию.si
выполняет следующую инструкцию, включая инструкции перехода.gdb-dashboard
не установлен, используйте команду layout
для отображения информации о регистрах и т. д., см. help layout
.x/<формат> <адрес>
для просмотра памяти, например, x/8i 0x80200000
для просмотра 8 инструкций, начиная с адреса 0x80200000
. См. help x
для получения подробной информации о формате.При отладке преобразования виртуальных адресов в физические GDB полностью полагается на чтение файла для определения адресов функций, поэтому могут возникать некоторые проблемы, и адреса нужно устанавливать вручную для отладки.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )