Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Отладка, assert и тестирование

Страница 41 из 43 · 2026-10-25 · 1 мин чтения

Отладка, assert и тестирование

Отладчик

Отладчик позволяет остановить программу на breakpoint, пошагово выполнять код, смотреть значения переменных и стек вызовов. Когда программа работает не так, как ожидается, сначала воспроизведи проблему минимальным примером и проверь фактические значения, а не делай вывод только по внешнему проявлению.

assert

assert из <cassert> проверяет предположение программиста:

#include <cassert>int DividePositive(int a, int b) {    assert(b > 0);    return a / b;}

В сборках с NDEBUG проверки assert отключаются. Поэтому не используй их для обязательной проверки пользовательского ввода или других ошибок, которые должны обрабатываться в релизе.

Маленькие функции проще проверять

Функция, которая получает входные данные и возвращает результат без скрытых побочных эффектов, обычно легче тестируется. Например, int Add(int, int) проще проверить, чем код, который одновременно читает консоль, изменяет глобальное состояние и пишет файл.

Unit-тесты

Модульный тест проверяет небольшую единицу поведения. Набор тестов должен включать обычные случаи, границы и ошибочные входы.

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

Sanitizers

Компиляторы GCC и Clang поддерживают санитайзеры, помогающие обнаруживать некоторые ошибки времени выполнения, например выход за границы и use-after-free. Например, в подходящей конфигурации можно включить -fsanitize=address,undefined. Поддержка зависит от компилятора и платформы.

Итог

Используй отладчик для исследования состояния, тесты — для закрепления ожидаемого поведения, а санитайзеры — для поиска некоторых классов ошибок памяти и неопределённого поведения.