При компиляции программы добавьте флаг компилятора -g
или, что еще лучше, -ggdb3
, что даст вам гораздо более красивый результат, добавив отладочные символы в исполняемый файл. Также убедитесь, что вы компилируете с уровнем оптимизации -O0
.
Для фактической отладки программы запустите gdb ./main.out
, чтобы запустить программу в сеансе отладки. Если затем вы запустите r
, gdb начнет выполнение программы, а затем остановится на строке, которая дает segfault.
Чтобы выяснить как вы дошли до этой точки, запустите bt
во время сеанса отладки, и вы получите обратную трассировку, которая покажет вам все вызовы функций, которые были сделаны для перехода к строке кода, в которой произошел сбой.
Конечно, вы можете сделать гораздо больше чем это (и вам, вероятно, понадобится, поскольку определение источника ошибки часто является только первым шагом). Вы можете использовать p
для печати значений переменных, установки точек наблюдения и многого другого. Какое-то время gdb даже поставляется с полноценным интерпретатором python, так что вы даже можете написать сценарий python для собственных нужд отладки.
Изучение того, как использовать gdb, может показаться сложным вначале , но проявите настойчивость, и я гарантирую, что ваши усилия окупятся со временем :)