Files
eduplan-cpp-eltex/diag/tasks/09_gdb/task.md
T

1.9 KiB
Raw Blame History

Задача 09 — отладка: найти и исправить дефекты (gdb)

В crash.c лежит программа, которая падает на части входов и портит память. Задача — не переписать её с нуля, а найти дефекты отладчиком и починить минимально.

Ожидаемое поведение после починки:

  • ./crash (без аргумента) печатает len=5 и завершается с кодом 0;
  • ./crash <слово> печатает len=<длина слова> и завершается с кодом 0;
  • ./crash "" печатает len=0 и завершается с кодом 0;
  • сборка с -fsanitize=address,undefined не даёт ни одного сообщения об ошибке.

Что сделать:

  1. Собрать с отладочной информацией и санитайзерами: gcc -g -O0 -fsanitize=address,undefined crash.c -o crash
  2. Разобраться, что именно портит память, а что приводит к падению при выходе. Полезно: gdb ./crash, run, bt, frame, info locals, watch.
  3. Исправить crash.c (минимальные правки, стиль сохранить).
  4. Заполнить answer.txt: сколько дефектов нашёл, какие именно, какими командами отладчика это подтвердил (по шагам), почему падало именно так.

Проверка: python3 grade.py 09 — компилирует crash.c (компилятор C, gcc) с ASAN/UBSAN и прогоняет 5 входов. answer.txt проверяется ревью (это часть оценки: важен ход разбора, а не только результат).