Я хотел бы знать, получает ли моя программа доступ к Нулевым указателям или устаревшей памяти.
След похож на это:
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x2b0fa4c8 (LWP 1333)] 0x299a6ad4 in pthread_mutex_lock () from /lib/libpthread.so.0 (gdb) bt #0 0x299a6ad4 in pthread_mutex_lock () from /lib/libpthread.so.0 #1 0x0058e900 in ?? ()
С помощью GDB 7 и выше вы можете изучить структуру $_siginfo
, которая заполняется при возникновении сигнала, и определить адрес ошибки:
(gdb) p $_siginfo._sifields._sigfault.si_addr
Если она показывает (void *) 0x0
(или маленькое число), то у вас есть разыменование указателя NULL.
Запустите свою программу под GDB. Когда произойдет segfault, GDB сообщит вам строку и утверждение вашей программы, а также переменную и связанный с ней адрес.
Вы можете использовать команду "print" (p) в GDB для проверки переменных. Если сбой произошел при вызове библиотеки, вы можете использовать серию команд "frame", чтобы просмотреть соответствующий кадр стека.