1 查看系统是否开启dump生成 0表示没开启
ulimit -c
但是这个只是针对当前这个连接,如果想要永久修改可以修改配置文件:vim /etc/profile
,然后添加上面的命令ulimit - c unlimited
.然后执行source /etc/profile
或者重启使刚刚的配置可以生效。
2查看dump生成的文件位置
cat /proc/sys/kernel/core_pattern
3 将dump文件和可执行文件放在一起
gdb -c ./core.dead_lock ./dead_lock
4进入gdb
bt 查看调用栈信息:info threads 当前有多少个线程 ; thread 2 切换到线程2上
这时我们进入线程2 thread 2 然后执行 bt查看调用栈 再使用f num 查看调用栈 使用p mtx1查看锁信息或者p *this
上面owner=30741表示这个锁被谁占用,0表示没有被线程抢占可以使用info threads查看所有线程id然后对比这个锁被哪个线程持有。
锁就是系统的标志量,只有一个线程可以占用锁资源并把锁的owen设置成线程的id。
使用gdb调试容易定位问题。