1.9 KiB
1.9 KiB
Задача 09 — отладка: найти и исправить дефекты (gdb)
В crash.c лежит программа, которая падает на части входов и портит память.
Задача — не переписать её с нуля, а найти дефекты отладчиком и починить минимально.
Ожидаемое поведение после починки:
./crash(без аргумента) печатаетlen=5и завершается с кодом 0;./crash <слово>печатаетlen=<длина слова>и завершается с кодом 0;./crash ""печатаетlen=0и завершается с кодом 0;- сборка с
-fsanitize=address,undefinedне даёт ни одного сообщения об ошибке.
Что сделать:
- Собрать с отладочной информацией и санитайзерами:
gcc -g -O0 -fsanitize=address,undefined crash.c -o crash - Разобраться, что именно портит память, а что приводит к падению при выходе.
Полезно:
gdb ./crash,run,bt,frame,info locals,watch. - Исправить
crash.c(минимальные правки, стиль сохранить). - Заполнить
answer.txt: сколько дефектов нашёл, какие именно, какими командами отладчика это подтвердил (по шагам), почему падало именно так.
Проверка: python3 grade.py 09 — компилирует crash.c (компилятор C, gcc) с ASAN/UBSAN
и прогоняет 5 входов.
answer.txt проверяется ревью (это часть оценки: важен ход разбора, а не только результат).