Начальные шаги отладки на QEMU

30 сентября 2026

ID debugging_kernelstub_qemu_initsteps

Чтобы начать отладку с использованием GDB-сервера ядра KasperskyOS на QEMU, нужно выполнить следующие шаги:

  1. Собрать отладочные версии исполняемых файлов и библиотек, создать образ решения для QEMU и запустить QEMU.

    Для этого нужно вызвать shell-команды cmake, указав параметры -D CMAKE_BUILD_TYPE=Debug и --target gdbsim.

    Пример:

    $ cmake -B build \

    -D CMAKE_TOOLCHAIN_FILE="$KOSCEDIR/toolchain/share/toolchain-*-kos.cmake" \

    -D CMAKE_BUILD_TYPE=Debug \

    && cmake --build build --target gdbsim

    Вместо цели gdbsim можно указать цель gdbsim/fast, чтобы не выполнять повторную сборку.

    QEMU запускается, но программы решения не начинают исполняться, пока GDB-сервер ядра ожидает подключения отладчика GDB. Это ожидание продолжается неограниченное время.

    Отладочные символы могут сохраняться как в ELF-файлах, так и в отдельных файлах. Во втором случае можно существенно уменьшить размер образа решения. Чтобы сохранить отладочные символы в файлах *.dbg, нужно использовать следующую CMake-команду:

    add_custom_command(TARGET <имя цели сборки> POST_BUILD

    COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $<TARGET_FILE:<имя цели сборки>> $<TARGET_FILE_NAME:<имя цели сборки>>.dbg

    COMMAND ${CMAKE_OBJCOPY} --strip-debug $<TARGET_FILE:<имя цели сборки>>

    COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$<TARGET_FILE_NAME:<имя цели сборки>>.dbg $<TARGET_FILE:<имя цели сборки>>)

  2. Запустить отладчик GDB и подключиться к GDB-серверу ядра.

    Для этого нужно вызвать shell-команду cmake, указав параметр --target gdb/fast.

    Пример:

    $ cmake --build build --target gdb/fast

    Отладчик GDB выполнит команды из автоматически созданного файла build/einit/.gdbinit.

  3. Создать инфериоры, привязать их к процессам и загрузить отладочные символы.

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

    • add-symbol-file <путь к файлу> – для исполняемых файлов со статической или динамической компоновкой;
    • file <путь к файлу> – для исполняемых файлов с динамической компоновкой.

    GDB-команду file нужно использовать, чтобы отладчик GDB загрузил отладочные символы исполняемого файла и динамических библиотек, от которых зависит этот исполняемый файл. Чтобы отладчик GDB загрузил отладочные символы только исполняемого файла с динамической компоновкой, нужно использовать GDB-команду add-symbol-file.

    Если отладочные символы сохраняются не в исполняемых файлах, а в отдельных файлах, то в исполняемые файлы добавляются ссылки на файлы с отладочными символами. При вызове GDB-команды add-symbol-file или file можно указать как исполняемый файл, так и файл с отладочными символами.

При повторной сборке (шаг 1) нужно завершить сессию отладки (выйти из отладчика GDB) и выполнить повторно шаги 2 и 3.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!