← Назад к вопросам

Какие утилиты используешь?

1.6 Junior🔥 111 комментариев
#Soft skills и мотивация#ООП и проектирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Утилиты для C/C++ backend-разработки

Профессиональная backend-разработка требует целого набора инструментов. Расскажу о тех, без которых я не представляю себе свою работу.

Компиляция и сборка

GCC (GNU Compiler Collection) — мой основной компилятор для production. Быстрый, стабильный, поддерживает все стандарты C++ до C++23. Часто использую флаги вроде -Wall -Wextra -Wpedantic -std=c++17 для максимальной строгости.

Clang/LLVM — альтернатива, часто с лучшей оптимизацией и сообщениями об ошибках. На macOS это default компилятор. Использую для профилирования и sanitizers.

CMake — стандарт для управления проектами. Кроссплатформенность, удобство, экосистема — без CMake трудно представить серьёзный проект.

cmake_minimum_required(VERSION 3.16)
project(my_backend)
set(CMAKE_CXX_STANDARD 17)
add_executable(server main.cpp)
target_link_libraries(server pthread)

Make или Ninja — для быстрой сборки. Ninja часто быстрее, особенно при инкрементальных сборках.

Отладка и анализ

GDB (GNU Debugger) — классический отладчик. Breakpoints, step-by-step выполнение, inspection переменных, backtraces. На Linux это first-line tool.

gdb ./my_app
(gdb) break main
(gdb) run
(gdb) next
(gdb) print variable

Valgrind — для поиска утечек памяти, invalid reads/writes. Абсолютно необходимо при работе с ручным управлением памятью.

valgrind --leak-check=full --show-leak-kinds=all ./my_app

AddressSanitizer (ASan) — встроенный в Clang/GCC инструмент, обнаруживает buffer overflows, use-after-free, утечки памяти. Быстрее Valgrind.

g++ -fsanitize=address -g myapp.cpp

ThreadSanitizer (TSan) — для поиска race conditions в многопоточном коде. Спасает часы отладки.

Профилирование

perf — Linux инструмент для профилирования CPU, cache misses, context switches. Показывает, где программа тратит время.

perf record ./my_app
perf report

Flamegraph — визуализация профиля, показывает стек вызовов. Быстро видны узкие места.

gperftools (Google Performance Tools) — профайлер памяти и CPU с minimal overhead. Хорош для production.

Качество кода

Clang-Format — автоматическое форматирование кода. Единообразный стиль во всём проекте.

clang-format -i *.cpp

Clang-Tidy — статический анализ, находит антипаттерны, предлагает улучшения.

clang-tidy myapp.cpp -- -std=c++17

cppcheck — ещё один статический анализатор, ловит потенциальные баги.

IWYU (Include What You Use) — проверяет, что все включаемые заголовки действительно используются.

Тестирование

Google Test (gtest) — стандартный фреймворк для unit-тестов в C++.

#include <gtest/gtest.h>

TEST(MathTest, Addition) {
    EXPECT_EQ(2 + 2, 4);
}

Catch2 — альтернатива, более современный синтаксис.

Mock (gmock) — встроена в Google Test, для мокирования зависимостей.

Version Control & CI

Git — обязателен, но это не утилита, это культура.

GitHub Actions / GitLab CI / Jenkins — для автоматизации сборки, тестирования, деплоя.

Утилиты среды выполнения

strace — трассирует системные вызовы, помогает понять, что программа делает на уровне ОС.

strace -e trace=network ./server

ltrace — аналогично для library вызовов.

ldd — показывает динамические зависимости исполняемого файла.

Вывод

Эти инструменты — мой ежедневный набор. Каждый решает конкретную задачу: GCC/Clang компилируют, GDB отлаживает, Valgrind/ASan ищет bugs, perf показывает bottlenecks, gtest обеспечивает качество. Владение этими утилитами отделяет junior от senior разработчика.