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, разработке кроссплатформенных приложений, проведению аудита кода и обучению персонала. Обращайтесь – мы превратим ваш мобильный телефон в полноценную рабочую станцию для разработки!