Какие утилиты для отладки и анализа кода на C++ ты используешь?

«Какие утилиты для отладки и анализа кода на C++ ты используешь?» — вопрос из категории DevOps, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В работе с C++ проектами я активно использую следующий инструментарий:

  • Отладчики: GDB (с расширениями типа gdb-dashboard или pwndbg) и LLDB (особенно в macOS/iOS среде). Для анализа дампов памяти (core dumps) они незаменимы.
  • Детекторы ошибок памяти: Valgrind (Memcheck) — классика для поиска утечек, некорректных доступов к памяти. В современных проектах чаще использую AddressSanitizer (ASan), LeakSanitizer (LSan) и UndefinedBehaviorSanitizer (UBSan), встроенные в компиляторы GCC/Clang, так как они значительно быстрее.
    # Компиляция с AddressSanitizer
    g++ -fsanitize=address -g -O1 my_program.cpp -o my_program
  • Профилировщики: perf (Linux) для системного профилирования и анализа производительности. Valgrind Callgrind/Cachegrind для детального анализа кэш-промахов и графа вызовов. Для профилирования непосредственно в коде использую Google Benchmark.
  • Статические анализаторы: Clang-Tidy для проверки стиля и поиска потенциальных багов, Cppcheck.
  • Трассировка: strace/ltrace для отладки взаимодействия с ОС и сторонними библиотеками.