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

看看调用堆栈

找到问题源码

现在可以分析代码了

相关推荐
闻缺陷则喜何志丹7 小时前
【贪心 字典序 回文 最长公共前缀】LeetCode3734. 大于目标字符串的最小字典序回文排列|分数未知
c++·算法·力扣·贪心·字典序·回文·最长公共前缀
_OP_CHEN9 小时前
C++进阶:(四)set系列容器的全面指南
开发语言·c++·stl·set·multiset·关联式容器·setoj题
zt1985q9 小时前
本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )
运维·服务器·windows·rabbitmq·ruby
烤奶要加冰9 小时前
PyCharm 社区版全平台安装指南
ide·windows·python·pycharm·mac
qq_479875439 小时前
Linux time function in C/C++【2】
linux·c语言·c++
一个不知名程序员www10 小时前
算法学习入门---前缀和(C++)
c++·算法
ol木子李lo10 小时前
Doxygen入门指南:从注释到自动文档
c语言·c++·windows·编辑器·visual studio code·visual studio·doxygen
夜晚中的人海11 小时前
【C++】分治-快速排序算法习题
开发语言·c++·排序算法
xier_ran11 小时前
Python从入门到精通:(2)Python 核心进阶教程从数据结构到面向对象
linux·windows·python·microsoft
richxu2025100111 小时前
Linux本地部署deepseek大模型之 6. Windows本地连接远程云服务器中的MySQL常见错误的解决办法
linux·服务器·windows