Одной из особенно полезных функций gdb является его способность проверять конечное состояние программы, которая потерпела крах.
Чтобы проверить аварийный дамп (или файл ядра, как его чаще называют), запустите gdb следующим образом:
gdb <имя-программы> <файл-ядра>
Например:
gdb a.out core
После запуска этой команды в основном файле GDB сообщит вам, как программа завершилась, и покажет, где в программе произошла ошибка:
Program terminated with signal 11, Segmentation fault.
#0 0x08048364 in foo () at foo.c:4
4 *x = 100;
В приведенном выше примере вы можете видеть, что программа завершилась с ошибкой сегментации при попытке присвоить значение указателю. Набрав backtrace (или bt или где ) в приглашении GDB, вы можете просмотреть полную обратную трассировку программы:
(gdb) backtrace
#0 0x08048364 in foo () at foo.c:4
#1 0x0804837f in main () at foo.c:9
В этот момент вы знаете, что main()
, вызванные foo()
и foo()
, потерпели крах в строке 4 при попытке присвоить значение *x
. Много раз, это предоставляет достаточно информации, чтобы позволить вам исправить ошибку.