We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Разработка и отладка C/C++ программ в Termux с использованием gdb и Valgrind

Подробное руководство по настройке среды разработки C/C++ в Termux, использованию отладчика gdb и инструмента Valgrind для поиска ошибок памяти.

Termux – это мощный терминальный эмулятор для Android, позволяющий установить полноценный набор Linux‑утилит. Благодаря возможности установки компиляторов и отладчиков, он становится отличной площадкой для разработки и отладки C/C++ программ прямо на мобильном устройстве.

Установка необходимого пакета

Для начала необходимо установить компилятор clang (или gcc), отладчик gdb и инструмент динамического анализа памяти valgrind. В Termux это делается через пакетный менеджер pkg:

pkg update && pkg upgrade
pkg install clang gdb make git valgrind

Если предпочтительнее использовать gcc, замените clang на gcc в команде выше.

Создание простого проекта

Создадим каталог проекта и простой файл hello.cpp:

mkdir -p ~/cpp_project && cd ~/cpp_project
cat > hello.cpp <<'EOF'
#include 

int main() {
    std::cout << "Hello, Termux!" << std::endl;
    return 0;
}
EOF

Скомпилируем программу с включёнными отладочными символами (-g) и оптимизацией -O0 (без оптимизации), чтобы отладка была максимально точной:

clang++ -g -O0 -o hello hello.cpp

Запустим программу, чтобы убедиться в её работоспособности:

./hello

Отладка с помощью gdb

Запуск gdb выглядит привычно:

gdb ./hello

Ниже представлены базовые команды, которые помогут быстро начать отладку:

  • break main – установить точку останова в функции main.
  • run – запустить программу под управлением отладчика.
  • next (или n) – выполнить текущую строку и перейти к следующей.
  • step (или s) – перейти в вызываемую функцию.
  • print variable – вывести значение переменной.
  • backtrace (или bt) – показать стек вызовов.
  • continue (или c) – продолжить выполнение до следующей точки останова.
  • quit – выйти из gdb.

Пример типичной сессии:

(gdb) break main
Breakpoint 1 at 0x104c: file hello.cpp, line 5.
(gdb) run
Starting program: /data/data/com.termux/files/home/cpp_project/hello 

Breakpoint 1, main () at hello.cpp:5
5       std::cout << "Hello, Termux!" << std::endl;
(gdb) next
6       return 0;
(gdb) print __builtin_return_address(0)
$1 = (void ) 0x104c
(gdb) continue
Continuing.
Hello, Termux!
[Inferior 1 (process 12345) exited normally]
(gdb) quit

Анализ памяти с помощью Valgrind

Valgrind позволяет выявлять утечки памяти, использование неинициализированных переменных и другие типичные ошибки. Для начала запустим программу под Valgrind:

valgrind --leak-check=full ./hello

Вывод будет содержать информацию о всех обнаруженных ошибках. Чтобы продемонстрировать работу с реальными проблемами, добавим в проект утечку памяти:

cat > leak.cpp <<'EOF'
#include 

int main() {
    int p = (int)malloc(10  sizeof(int)); // выделяем память, но не освобождаем
    return 0;
}
EOF

clang++ -g -O0 -o leak leak.cpp
valgrind --leak-check=full ./leak

В результате Valgrind сообщит о «definitely lost» памяти, указывая точный файл и строку, где произошла утечка.

Типичные проблемы и их решения

  • Отсутствие символов отладки. Убедитесь, что при компиляции указан флаг -g. Без него gdb будет показывать только адреса.
  • Valgrind не запускается. На некоторых ARM‑устройствах требуется установить пакет valgrind из репозитория termux-extras или собрать из исходников.
  • Проблемы с правами доступа. Запускайте отладчик и Valgrind без sudo (в Termux его нет), но убедитесь, что файлы находятся в домашнем каталоге пользователя.
  • Слишком медленная работа. Отключите оптимизацию (-O0) во время отладки, иначе gdb может «потерять» переменные.

Полезные лайфхаки

  • Создайте alias в .bashrc для быстрого запуска gdb: alias gdbc='gdb -q'.
  • Используйте tmux или screen в Termux, чтобы сохранять сессии отладки.
  • Для больших проектов рекомендуется использовать make и отдельный файл Makefile с правилами сборки в режиме отладки.
  • Включайте проверку на переполнение стека с помощью флага -fsanitize=address (требуется clang).

Заключение

Termux предоставляет полноценную Linux‑среду, позволяя разрабатывать, компилировать и отлаживать C/C++ программы непосредственно на Android‑устройстве. Интеграция gdb и Valgrind делает процесс отладки столь же эффективным, как и на настольных системах. При правильной настройке и использовании описанных практик вы сможете быстро находить логические ошибки, утечки памяти и оптимизировать код без необходимости переключаться на ПК.

Если вам требуется более глубинная настройка среды разработки, написание сложных проектов или профессиональная поддержка в области C/C++ и системного программирования, команда RybinskLab готова помочь. Мы предоставляем услуги по настройке Termux, разработке кроссплатформенных приложений, проведению аудита кода и обучению персонала. Обращайтесь – мы превратим ваш мобильный телефон в полноценную рабочую станцию для разработки!

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект