linux中使用gdb调试c++的dump文件

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调试容易定位问题。

相关推荐
TG:@yunlaoda360 云老大4 小时前
华为云国际站代理商GeminiDB的企业级高可用具体是如何实现的?
服务器·网络·数据库·华为云
yBmZlQzJ4 小时前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
Shanxun Liao4 小时前
Cenots 7.9 配置多台 SSH 互信登陆免密码
linux·运维·ssh
j_xxx404_4 小时前
Linux:第一个程序--进度条|区分回车与换行|行缓冲区|进度条代码两个版本|代码测试与优化
linux·运维·服务器
一点晖光4 小时前
jenkins优化记录
运维·jenkins
looking_for__5 小时前
【Linux】Ext系列文件系统
linux
最贪吃的虎5 小时前
Git: rebase vs merge
java·运维·git·后端·mysql
OliverH-yishuihan5 小时前
开发linux项目-在 Windows 上 基于“适用于 Linux 的 Windows 子系统(WSL)”
linux·c++·windows
yBmZlQzJ6 小时前
内网穿透工具通过端口转发实现内外网通信
运维·经验分享·docker·容器·1024程序员节
DeepHacking6 小时前
Overleaf 本地Docker部署
运维·docker·容器