gdb调试线程锁
来源:互联网 发布:mysql 分布式基础架构 编辑:程序博客网 时间:2024/06/08 00:17
用于调试多线程下程序异常入锁导致整个进程资源死锁,可通过GDB线程调试暂停点的各个线程栈情况。
(1) 使用GDB启动程序
(2)在线程死锁处停止程序$gdb TmsServer进入GDB后启动程序(gdb) r
(a)目前本程序特征是在资源死锁后不再对外部请求作出响应
发现出现不响应时首先查看是否出现核心转储,若没有则表明程序确实进入某种锁状态,按ctrl+c暂停程序
(3) 查看当前节点上线程状态
(4) 切换线程
(5) 查看线程堆栈,并查处死锁位置
(6)多切换几个线程,全面的分析死锁的原因。一般来说首先使用频率最高的锁在所有函数出口上是否已解锁。
本次分析:
分析锁之间的阻塞关系,发现阻塞recv的都是writelog,因为该锁中间有嵌套关系,而从第二组可看出最终造成死锁的是writelog锁,因此排查writelog是否有很低级错误。结果未发现。
第一轮如果就出现死锁,则可检查锁配对和可能的程序出口上是否进行了开锁。
如果多轮运行后出现,且基本确认函数出口均解锁,则需要判断是否是内存越界,则需要用到工具:valgrind进行内存越界诊断。
发现出现不响应时首先查看是否出现核心转储,若没有则表明程序确实进入某种锁状态,按ctrl+c暂停程序
阅读全文
0 0
- gdb调试线程锁
- gdb调试死锁线程
- gdb调试线程
- 使用gdb调试死锁线程
- gdb多线程调试锁定线程
- 关于gdb调试线程死锁
- gdb调试多进程、线程
- GDB调试多进程/线程
- gdb调试多好几次&线程
- linux gdb 调试多线程 单独调试线程
- linux gdb 调试多线程 单独调试线程
- boost::thread简介和gdb调试线程
- gdb 如何调试绑定一个线程
- gdb调试程序不能显示线程创建信息问题
- linux 下线程的简单gdb调试方法
- arm下gdb调试和杀线程以及make编译
- GDB调试
- gdb 调试
- CDH(hadoop) install on ubuntu 14.04server
- 泛型基础----------泛型方法二
- 【Angular2】Tour of Hero 部分理解
- 分数
- [Android]聊聊Kotlin和Swift
- gdb调试线程锁
- strcmp was not declared in this scope(转)
- php显式转换
- react vr
- Linux并发(子进程退出状态的处理)
- 设计模式—简单工厂(一)
- Java多线程Condition接口原理详解
- 10-排序6 Sort with Swap(0, i)
- 操作系统运行机制