Windows C++ 排查死锁

开发出来应用程序突然间卡死不动,如果其中是因为死锁问题卡列该如何排查

下面是一个简单的死锁例子

cpp 复制代码
#include <iostream>
#include <thread>
#include <mutex>

std::mutex a, b;

void function_a() {
	std::lock_guard<std::mutex> _x(a);
	std::this_thread::sleep_for(std::chrono::milliseconds(500));
	std::lock_guard<std::mutex> _y(b);
}

void function_b() {
	std::lock_guard<std::mutex> _y(b);
	std::lock_guard<std::mutex> _x(a);
}


int main() {
	std::thread t1(function_a);
	std::thread t2(function_b);

	t1.join();
	t2.join();
	return 0;
}

以Debug模式编译运行后,毫无意外的没反应了。

现在打开任务管理器,找到进程

CPU利用率0,显然不太会有死循环,右键"转到详细信息 ",然后"分析等待链 "。

线程18208 在等待11188结束,线程11188 卡住了。

现在可以打开WinDbg,Attach 到目录进程,在这之前要设置好符号目录,这些步骤就跳过。

现在直接!threads查看有哪些线程

计算下11188 是哪一条

切换到2bb4

看看调用堆栈

找到问题源码

现在可以分析代码了

相关推荐
it技术5 分钟前
C++ 设计模式原理与实战大全-架构师必学课程 | 完结
c++
zhuzhuxia⌓‿⌓21 分钟前
线性表的顺序和链式存储
数据结构·c++·算法
小苏兮26 分钟前
【C++】stack与queue的使用与模拟实现
开发语言·c++
zym大哥大1 小时前
高并发内存池
服务器·数据库·windows
杨小码不BUG1 小时前
小鱼的数字游戏:C++实现与算法分析(洛谷P1427)
c++·算法·数组·信奥赛·csp-j/s
高山有多高1 小时前
栈:“后进先出” 的艺术,撑起程序世界的底层骨架
c语言·开发语言·数据结构·c++·算法
普罗米修斯1 小时前
C++ 设计模式理论与实战大全【共73课时】
c++·后端
普罗米修斯1 小时前
C++ 设计模式原理与实战大全-架构师必学课程 | 完结
c++·后端
夜月yeyue3 小时前
个人写HTOS移植shell
c++·mcu·算法·性能优化·架构·mfc
ajassi20003 小时前
开源 C++ QT QML 开发(九)文件--文本和二进制
c++·qt·开源