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

看看调用堆栈

找到问题源码

现在可以分析代码了

相关推荐
神仙别闹17 小时前
基于QT(C++)实现学本科教务系统(URP系统)
数据库·c++·qt
deng-c-f18 小时前
Linux C/C++ 学习日记(49):线程池
c++·学习·线程池
ulias21218 小时前
C++ 的容器适配器——从stack/queue看
开发语言·c++
daidaidaiyu18 小时前
FFmpeg 关键的结构体
c++·ffmpeg
欧特克_Glodon19 小时前
C++医学图像处理经典ITK库用法详解<一>:图像输入输出模块功能
c++·图像处理·itk
一个不知名程序员www20 小时前
算法学习入门---priority_queue(C++)
c++·算法
Pafey20 小时前
C++的左值引用、右值引用以及转发和完美转发
c++
CoderCodingNo20 小时前
【GESP】C++三级真题 luogu-B4414 [GESP202509 三级] 日历制作
开发语言·c++·算法
晨曦夜月21 小时前
笔试强训day7
开发语言·c++·算法
木心爱编程21 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——按钮与标签联动:QPushButton + QLabel 实现图片切换器
java·c++·qt