上一篇文章是使用lockcop软件检测死锁的。参考见:使用lockcop软件检测c++死锁_baidu_16370559的博客-CSDN博客

现在使用windbg。

可运行的程序和代码还是一样的。

1.配置symbols

因为我使用的windbg 版本是6.12 。提示Unable to resolve ntdll!RtlCriticalSectionList

因为在新版本的windbg中可能部分指令不支持。
如果有如下提示
NTSDEXTS: Unable to resolve ntdll!RtlCriticalSectionList
NTSDEXTS: Please check your symbols
解决方法:下载symbols
在File=>Symbol Path File 输入SRV*C:\Windows Sysmbols* http://msdl.microsoft.com/download/symbols
然后在命令框中输入.reload

2.直接双击运行测试程序memeroy.exe。windbug 操作 菜单file->attach to a process 操作连接到memeroy.exe。

3.先用!locks查看所有的线程占用的锁

这里可以看到有2个线程正在等待2个锁,第一个线程等待的锁是01056424,但被44f28这条线程占用,第二个线程等待的锁是010563f4,但被415b8线程占用.我们需要查看44f28线程和415b8线程的id,具体可以通过查看工具栏中Processes and Threads.结果见上图。

4.分别输入~3kb和~2kb查看这个两个线程的调用栈

由数据可知,44f28线程正在等待一把010563f4的锁,而415b8线程也正在等待锁01056424。

分析:结合第三步获取的信息可知,锁010563f4 是线程415b8 占用的,而锁01056424是线程44f28占用的,如此形成环路,就产生了死锁。

使用windbg 检查c++程序死锁相关推荐

  1. WinDBG调试dNet程序总结

    WinDBG工具简介 http://www.cnblogs.com/mashuping/archive/2009/03/28/1424168.html 对于一般的程序不需要使用WinDBG工具去调试, ...

  2. PPC中检查某程序是否运行

    有时候经常需要检查某个程序是否正在运行,在windows mobile 5.0系统开发中我经常用到以下几种方法: 第一种: HANDLE hMutex=::CreateMutexW(NULL,true ...

  3. loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!

    我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...

  4. 安装loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!

    我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...

  5. 安装loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!”...

    我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...

  6. 使用WinDbg抓取程序报错的Dump文件

    使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump,教程 前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump.不过还是先来段 ...

  7. Windbg调试.net程序(2)实例分析

    一.样本信息 样本名字: Moment.exe 样本大小: 8,400,896 bytes 病毒类型: Trojan.MSIL/Injector sha1: 17b98df6f5e086a5c1e7b ...

  8. Java 程序死锁问题原理及解决方案

    原文出处: IBM developerWorks Java 语言通过 synchronized 关键字来保证原子性,这是因为每一个 Object 都有一个隐含的锁,这个也称作监视器对象.在进入 syn ...

  9. 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!

    一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...

  10. WinDbg调试.NET程序入门

    俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dum ...

最新文章

  1. java 1.7 liunx_在linux下安装Jdk1.7
  2. 分布式系统理论之两阶段提交协议
  3. Python之Pandas库学习(一):简介
  4. VB无所不能之三:VB截获Windows消息的钩子
  5. Uncaught SecurityError: Failed to execute 'replaceState' on 'History': A history state object with
  6. 许可证( License LicenseLicenseLicenseLicenseLicense)服务器配置
  7. android 左右卡片切换,3D卡片切换
  8. HDU 2076 夹角有多大(题目已修改,注意读题)
  9. Atitit.cateService分类管理新特性与设计文档说明v1
  10. 如何从零创建一个机器人模型
  11. jpg转bmp c语言 linux,C++_C语言实现BMP转换JPG的方法,本文实例讲述了C语言实现BMP转 - phpStudy...
  12. 【Spring Security】spring security 之初探jwt
  13. 五、SQL–索引/约束⑥(外键约束)
  14. 2021 工业信息安全技能大赛 线上赛第一场--隐藏的工程
  15. ola2672978400 oj最短路径
  16. 建筑力学与结构【14】
  17. linux 静态编译多媒体框架,Go编译32位GNU静态链接库的方法
  18. 2021软考数据库工程师复习笔记记录
  19. Ubuntu配置socks5转http
  20. 发布JNCIP考试标准版本JUNOS实验用虚拟机

热门文章

  1. a标签的onclick和href同时存在的写法
  2. LVS-DR+Ldirectord+FreeNas实现负载均衡群集
  3. PHP可以通过什么组件上传大文件
  4. 使用Koa2重构博客项目
  5. C# RabbitMQ(一)介绍
  6. Django中使用MySQL
  7. PHP数据处理基本校验
  8. [Matlab]中pcolor和colormap的使用
  9. java 数学公式解析_JAVA 文本表达式解析成数学公式,计算出结果
  10. configure: error: Library requirements (libpcre >= 7.8) not met