Отладка: как читать ошибки компилятора и исправлять баги
Сохраняй спокойствие, читай сообщение и исправляй баги маленькими шагами
Главная мысль: Баги делают все программисты -- даже эксперты, каждый день. Баг -- это просто ошибка в твоём коде. Хорошая новость в том, что C++ обычно сам говорит, что не так. Умение спокойно, без паники, читать эти сообщения -- один из самых полезных навыков, которые ты можешь развить.
К концу этой темы ты сможешь:
- различать ошибки компиляции, ошибки компоновщика (линкера) и ошибки времени выполнения,
- читать сообщение компилятора и находить файл, строку и причину,
- понимать частые сообщения вроде
expected ';',undeclared identifierиno matching function, - следовать спокойному пошаговому порядку поиска и исправления бага.
1. Путь от исходного кода к работающей программе
Прежде чем ловить баги, посмотрим на путь, который проходит твоя программа. Когда ты нажимаешь "Запустить", компьютер по порядку делает три дела:
- Компиляция -- компилятор читает твой файл
.cppи превращает его в машинные инструкции. Если текст нарушает правила C++ (нет точки с запятой, имя написано с ошибкой), он останавливается здесь с ошибкой компиляции. - Компоновка (линковка) -- линкер соединяет все части (твой код плюс код библиотек) в один запускаемый файл. Если функция была обещана, но так и не написана, ты получишь ошибку линкера.
- Выполнение -- готовая программа реально запускается. Если она стартует, но делает не то, или падает на середине, это ошибка времени выполнения.
Уже одно понимание того, какой из трёх этапов дал сбой, многое подсказывает о том, где искать.