Это будет, пожалуй, самая эзотерическая лекция. Я не смогу вам объяснить как искать ошибки во всевозможных программах, но постараюсь показать инструменты которые помогут вам с поиском различных багов.

Основным языком сегодняшней лекции будет C++ с вкраплениями Python, но некоторые идеи можно будет применять за пределами этих языков.

Coredump

ака корка

Специфический файл появляющийся при прерывании сигналом **SIGQUIT** . В данном файле лежит информация о состоянии kill-нутого процесса

С помощью этого файла вы можете понять, что произошло с вашей программы и раскопать причины падения.

Важно — этот файл может содержать чувствительную информацию и если вам важно не допустить утечки этих данных, то следите в том числе за доступами к этим файлам, а так же обфусцируйте данные в них.

GDB

GNU debugger одна из самых важных утилит GNU. Является самым распространенным инструментом для дебага программ написанных на C++ и поэтому начнем наш разговор с нее.

В GDB доступны два “режима” — прерывание работающего процесса и работа с coredump-ом. Взаимодействие и с тем и с другим отличается, поэтому расскажу о том как дебагать активные программы и потом расскажу об отличия в дебаге корок.

В момент запуска GDB ваша однопоточная программа превращается в конечный автомат.

Важное дополнительное понятие которое я введу для удобства — курсор. Под курсором я подразумеваю текущее состояние процесса(следующая строка, значение переменных и тп).

Команды s(stepn(next)будут вашими двумя главными инструментами во время дебага процессов. Они обе переводят курсор на следующую строку. Отличие в том, что step ”проваливается” в вызов функции, а next переходит на следующую строку в текущей функции.

b(breakpoint) выставляет точку остановы в ход исполнения вашей программы для дальнейшего дебага.

В дебаге coredump-а вам могут пригодиться все те же команды(и в дебаге процесса вам могут понадобиться команды отсюда), но некоторые я подсвечу отдельно здесь подсвечу.