core dump 生成的原因
内存访问越界(地址,权限)
多线程程序使用了线程不安全的函数
多线程race condition
非法指针
堆栈溢出
未完待续
注意: 部分信号会导致进程直接崩溃,但不产生core文件
生成core dump 文件
#允许生成core文件
ulimit -c 1024
#打开配置文件,设置core文件名格式
#sudo chmod +w /etc/sysctl.conf
cat /etc/sysctl.conf
#%e: 可执行文件名
#%p: 进程的PID
#%u: real uid of the process
#%g: real gid of the process
#%t: the time when the core is dumped
#%h: host name
#%c: the max size of the core dump file
#添加如下两行
kernel.core_pattern =%e.%p.%t.core
#如果core_uses_pid被配置成1,那么即使core_pattern中没有设置%p,
#最后生成的core dump文件名仍会加上进程ID。
kernel.core_uses_pid = 0
#sudo chmod -w /etc/sysctl.conf
#生效
sysclt -p
GDB调试
死锁调试
#编译
g++ -g deadlock_check.cc -lpthread
#运行程序
./a.out &
#当出现死锁时,发送信号11,这个会导致进程产生core dump文件,从而保存死锁现场,以便调试
killall -11 a.out
#使用 gdb
gdb ./a.out xxx.core
#输入如下命令,以便输出各个线程的调用栈
thread apply all bt
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。