Отладка прикладного приложения
Если ядро KasperskyOS ожидает подключения отладчика перед запуском и требуется отладить процесс, запускаемый из KPA-пакета, можно выполнить отладку со старта.
Также см. обучающий сценарий "Отладка примера в Neovim".
Чтобы отладить прикладное приложение, выполните следующие действия:
- Добавьте в проект файл конфигурации
.vimspector.jsonдля отладки в GDB со следующим содержанием:.vimspector.json
{
"adapters": {
"kos-gdb": {
"name": "kos-gdb",
"command": [
"/opt/KasperskyOS-Community-Edition-Qemu-<version>/toolchain/bin/debug_adapter",
"--gdb-path",
"/opt/KasperskyOS-Community-Edition-Qemu-<version>/toolchain/bin/aarch64-kos-gdb",
"--transport",
"stdio"
]
}
},
"configurations": {
"KOS attach (Hello)": {
"default": true,
"adapter": "kos-gdb",
"filetypes": [ "c", "cpp" ],
"configuration": {
"request": "attach",
"name": "Attach and debug",
"gdbServer": "tcp::12345",
"useExtendedRemote": true,
"setupCommands": [
{
"description": "Load gdb_init",
"text": "source <path to project>/gdb_init",
"ignoreFailures": false
}
],
"setupServerCommands": [
{
"description": "Load setup script",
"text": "source <path to project>/setup",
"ignoreFailures": false
}
]
}
}
}
}
При использовании примера выше замените параметры
<version>и<path to project>на версию SDK и путь к корневой директории примера соответственно.Описания использованных в файле
.vimspector.jsonпараметров см. в разделе Справочная информация об адаптере. - Добавьте в проект файл
gdb_init:gdb_init
shell rm -rf <
path to project>/build/einit/sysroot-symbols/shell mkdir <
path to project>/build/einit/sysroot-symbols/shell find -L <
path to project>/build -type f -executable | xargs -I {} cp {} <path to project>/build/einit/sysroot-symbols/shell find -L <
path to project>/build -type f -executable | xargs -I {} /opt/KasperskyOS-Community-Edition-Qemu-<version>/toolchain/bin/cmake -DBINARY={} -DBUILD_ID_DIR=<path to project>/build/sysroot-symbols/ -P /opt/KasperskyOS-Community-Edition-Qemu-<version>/toolchain/share/cmake/Modules/platform/building/build-id.cmake 2> /dev/nullЗамените параметры
<version>и<path to project>на версию SDK и путь к корневой директории примера соответственно.Команды в файле
gdb_initподготавливают директорию, содержащую символы для отладки. - Добавьте в проект файл
setupс командами для настройки GDB-сервера:setup
set sysroot <
path to project>/kasperskyos_ping/build/einit/sysroot-symbolsset solib-search-path /opt/KasperskyOS-Community-Edition-Qemu-<version>/sysroot-aarch64-kos
set osabi auto
set scheduler-locking off
set schedule-multiple on
set follow-fork-mode parent
set follow-exec-mode same
set detach-on-fork off
monitor exec kl.ExecMgrEntity
catch exec
continue
detach inferiors 1
remove-inferiors 1
monitor exec <process name>
catch exec
continue
b main
continue
Замените параметры:
<version>и<path to project>на версию SDK и путь к корневой директории примера соответственно.<process name>на имя отлаживаемого процесса. Чтобы узнать имя процесса, можно запустить решение один раз и посмотреть в журнале его имя в полеname. Например, для процесса Hello в журнале будет записьname: Hello.1. Также можно узнать имя процесса с помощью gdb-командыi os processesпосле запуска отлаживаемого процесса.
- Находясь в корневой директории примера, соберите его образ для дальнейшей отладки:
cmake -B build -D CMAKE_TOOLCHAIN_FILE="$KOSCEDIR/toolchain/share/toolchain-aarch64-kos.cmake" -D CMAKE_BUILD_TYPE=Debug && cmake --build build --target gdbsim
В результате сборки в терминале выведется следующее сообщение:
[KDBG] Waiting for GDB connection infinitely
- В отдельном терминале откройте файл исходного кода программы в Neovim.
- Запустите vimspector, нажав на клавишу отладки (обычно F5) или выполнив команду
:call vimspector#Launch().В результате в окне терминала появится текст "
Initializing debug session KOS attach (Hello) (0)..". и начнется отладка.