24 lines
1.9 KiB
Markdown
24 lines
1.9 KiB
Markdown
# Задача 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` проверяется ревью (это часть оценки: важен ход разбора, а не только результат).
|