core文件生成及使用

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值