欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Windows C++ 排查死锁

Windows C++ 排查死锁

2025/4/4 13:48:35 来源:https://blog.csdn.net/weixin_43868793/article/details/146917892  浏览:    关键词:Windows C++ 排查死锁

开发出来应用程序突然间卡死不动,如果其中是因为死锁问题卡列该如何排查
下面是一个简单的死锁例子

#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
在这里插入图片描述
看看调用堆栈
在这里插入图片描述
找到问题源码
在这里插入图片描述
现在可以分析代码了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词