我想知道我的程序是否在访问空指针或陈旧的内存。
回溯看起来像这样:
程序接收到信号SIGSEGV,分段错误。 [切换到线程0x2b0fa4c8(LWP 1333)] 0x299a6ad4在/lib/libpthread.so.0中的pthread_mutex_lock()处。 (gdb) bt #0 0x299a6ad4在/lib/libpthread.so.0中的pthread_mutex_lock()处。 #1 0x0058e900在??()处。
使用 GDB 7 或更高版本,您可以检查在信号发生时填充的 $_siginfo
结构,并确定故障地址:
(gdb) p $_siginfo._sifields._sigfault.si_addr
如果显示 (void *) 0x0
(或者一个小数字),那么你就有一个空指针解引用错误。bt
命令将显示一个回溯,让你看到故障发生时自己的代码所处的位置。 - caf
ptype $_siginfo
查看结构体ä¸è¿˜æœ‰å“ªäº›å†…容。 - To1ne