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

shiyang6017
158 声望59 粉丝

« 上一篇
弱回调

引用和评论

0 条评论