gdb调试coredump文件

325 阅读1分钟

系统环境:Ubuntu 创建gdb_test.cpp,写入:

int main() {
	int *ptr = nullptr;
	*ptr = 100;
	return 0;
}

操作空指针产生段错误。 编译生成二进制可执行文件: g++ gdb_test.cpp -g -std=c++11 -o gdb_test
运行:

image.png

产生core.xxxx文件。

没有core文件的原因

使用ulimit -a查看:

image.png

core file size指的是允许core文件的大小,如果是0就不可产生,更改: ulimit -c unlimited。 想更改哪一项,就跟哪一项的后缀,-a都显示出来了。
对于Ubuntu,还有一个apport服务,负责自动转发错误,接管了core文件,将这个服务关闭。
sudo vim /etc/default/apport,设置enabled=0。重启。
使用cat /proc/sys/kernel/core_pattern检查,如果是core就代表成功。

调试操作

gdb [binfile] [corefile]即可。

  • 查看调用堆栈 bt(backtrace)
  • 找到崩溃代码位置
  • 更改代码