Разработка
Разработка
Выберите платформу

Отладка нативных приложений с помощью ndk-gdb

Это руководство предоставляет основные рекомендации по использованию ndk-gdb для отладки VR-проектов с нативным кодом и дополняет соответствующую документацию Android Studio.
В Android NDK входит мощный инструмент для отладки — ndk-gdb, представляющий собой небольшой shell-скрипт-оболочку GDB. Использование ndk-gdb из командной строки добавляет в процесс отладки удобные функции. Например, это позволяет добавлять точки останова, перемещаться по коду и проверять переменные.

Создание точек останова

Остановка на функции
(gdb) break SomeFunctionName()
или
(gdb) break SomeClass::SomeMethod()
Пример использования:
(gdb) break OVR::VrCubeWorld::Frame(OVR::VrFrame const&)
    Breakpoint 2 at 0xf3f56118: file jni/../../../Src/VrCubeWorld_Framework.cpp, line 292.
Остановка по строке файла
(gdb) break SomeFile.cpp:256
Условные точки останова
Добавьте if <условие> в конец команды остановки.
Пример использования:
(gdb) break OVR::VrCubeWorld::Frame(OVR::VrFrame const&) if vrFrame.PredictedDisplayTimeInSeconds > 24250.0
 Breakpoint 6 at 0xf3f58118: file jni/../../../Src/VrCubeWorld_Framework.cpp, line 292.
Остановка в текущем месте выполнения
Пример использования:
(gdb) break OVR::VrCubeWorld::Frame(OVR::VrFrame const&) if vrFrame.PredictedDisplayTimeInSeconds > 24250.0
   Breakpoint 6 at 0xf3f58118: file jni/../../../Src/VrCubeWorld_Framework.cpp, line 292.
Остановка в текущем месте выполнения
Когда приложение активно работает, нажмите Control-C, чтобы немедленно остановить выполнение и вызвать приглашение gdb.

Пошаговое выполнение кода

Переход через шаг
(gdb) next
или
(gdb) n
Вход в шаг
(gdb) step
или
(gdb) s
Продолжение выполнения программы
(gdb) continue
или
(gdb) c

Вывод данных

Вывод структуры
Чтобы улучшить читаемость, можно включить режим красивого вывода:
 (gdb) set print pretty on
Для вывода структуры:
 (gdb) print SomeStructVariable
Пример использования:
(gdb) print currentRotation
 $1 = {
  x = 23185.9961,
  y = 23185.9961,
  z = 0,
  static ZERO = {
   x = 0,
   y = 0,
   z = 0,
   static ZERO = <same as static member of an already seen type>
  }
 }
Форматированный вывод (printf)
Пример использования:
(gdb) printf "x = %f\n", currentRotation.x
x = 23185.996094

Команды для точек останова

Точки останова в GDB могут автоматически выполнять определенные команды при их срабатывании. Это удобно для вставки выводов (print statements) без перекомпиляции кода или для изменения данных в ключевых точках программы без полной остановки выполнения. Эти команды задаются с помощью commands.
Вы можете указать номер точки останова в виде аргумента; если аргумент отсутствует, используется последняя созданная точка останова. После ввода команды вы увидите строки, начинающиеся с >, где можно вводить GDB-команды (по одной на строку), которые будут выполнены при срабатывании точки останова. Завершите ввод последовательности команд, напечатав end.
В следующем примере мы создаем точку останова, которая при срабатывании автоматически выводит значение локальной переменной и продолжает выполнение программы:
(gdb) break OVR::VrCubeWorld::Frame(OVR::VrFrame const&)
 Breakpoint 1 at 0xf3f56118: file jni/../../../Src/VrCubeWorld_Framework.cpp, line 292.
 (gdb) commands
 Type commands for breakpoint(s) 1, one per line.
 End with a line saying just "end".
 >silent
 >printf "time = %f\n", vrFrame.PredictedDisplayTimeInSeconds
 >continue
 >end

Текстовый пользовательский интерфейс (Text User Interface, TUI)

Чтобы включить или отключить TUI, нажмите CTRL+x, а затем CTRL+a.
Подробнее о TUI и его сочетаниях клавиш см. по следующей ссылке: https://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html.
Логотип навигации
Русский
© 2026 Meta