Windows程序卡顿、无响应问题定位
当windows程序出现异常、界面卡顿、无响应情况时,在有工程和源码的情况下,程序员通常是打开IDE,在DEBUG模式下进行调试。但如果是一个RELEASE程序,且无调试环境,该如何来定位呢。
这里介绍一下通过adplus导出dump文件,用windbg来查看的方法。
windbg
在这之前,先大概了解一下windbg。简单来说windbg就是Windows下对用户态/内核态的程序进行调试、分析的工具。不仅提供了图形界面操作,还有着着强大的调试命令。
adplus是一个Microsoft Product Support Services (PSS) 的工具,可以用来排查任何进程或者应用程序的停止响应(hang),或者崩溃(crash)的错误。
windbg和adplus 都随 Microsoft Debugging Tools for Windows 一起提供。
下载地址: https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/
安装的时候可以选择需要的功能,不用全都装,不然会比较大。
一个例子
下面通过一个例子来看一下吧。
先模拟一个有问题的界面程序。这里用VC创建一个MFC对话框程序,添加了一按钮,点击按钮会进入死循环。

void CtestDlg::OnBnClickedButtonLoop()
{
while (true) {}
}
点击“死循环”按钮,程序出现无响应的情况。
这个时候需要用到adplus了。如果winsdk正常安装的话,windbg 和 adplus 会存放在“C:\Program Files (x86)\Windows Kits\10\Debuggers\x86”路径下。
adplus 具有两种操作模式:
- “Hang”模式用于解决进程挂起、100% CPU 使用率以及不涉及崩溃的其他问题。
- “Crash”模式用于解决崩溃问题,或者用于解决导致程序或服务意外退出的任何其他类型的错误。
adplus 的具体使用就不做介绍了,这里仅用到 Hang 模式,用来抓取程序的快照,导出dump文件。
adplus -hang -pn test.exe -quiet -o e:\dumps
在控制台执行上述命令,执行成功的话会有类似如下打印,并在“e:\dumps”目录下生成dump文件。

接下来,打开windbg,点击“File”->“Open Crash Dump...”,选择刚才导出的dump文件。

然后在windbg下方的命令行输入kb,windbg会打印出当前进程的调用栈。

一般来说,通过查看进程的调用栈,就能大概知道程序出错的地方了。
如果无法显示符号名称,请点击“File”->“Symbol File Path...”来设置pdb文件的路径。
windbg的其它命令:
~ 简洁地显示当前进程的所有线程,
~* 表示所有线程
~0kp 显示第一个线程栈
~*kp 显示所有线程栈
Windows程序卡顿、无响应问题定位的更多相关文章
- C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是 ...
- c#中多线程写DataGridView出现滚动栏导致程序卡死(无响应)的解决的方法
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013529927/article/details/24225567 由于写的程序涉及到多线程维护一 ...
- 关于Office软件中Word输入时卡顿无反应的解决办法!
最近在安装office2013时遇到了这样一个问题,就是在激活office之后,打开Word输入内容时十分卡顿.也是狂搜网上各种办法,有说改注册表的,也有说在office选项里设置什么输入法的,全试了 ...
- C#多线程解决程序卡顿问题
描述: 在 C# 中,System.Threading.Thread 类用于线程的工作.它允许创建并访问多线程应用程序中的单个线程.进程中第一个被执行的线程称为主线程. 案例: static void ...
- ueditor富文本编辑器——上传图片按钮卡顿,响应慢
最近负责将公司官网从静态网站改版成动态网站,方便公司推广营销人员修改增加文案,避免官网文案维护过于依赖技术人员.在做后台管理系统时用到了富文本编辑器Ueditor,因为公司有一个阿里云文件资源服务器, ...
- Win8/Win10下程序经常无响应的解决办法
如果你使用Win8/Win10系统时经常出现程序无响应的问题不仿试下如下解决办法. 表现症状: 任何程序都有可能出现无响应(记事本.Visual Studio.QQ.视频播放器等) 一旦一个程序出现未 ...
- Delphi XE6 使用定时器或者线程解决程序界面无响应问题
---恢复内容开始--- 介绍 在手机应用上,我们不应该使用速度慢的代码,当然我们在桌面程序上也应该避免这个,当手机应用长时间没有相应的时候,程序会提示“程序没响应,是否关闭”的提示,这个非常不好,所 ...
- Android app 性能优化的思考--性能卡顿不好的原因在哪?
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
- Win 10卡顿怎么办?解决win10卡顿的方法大汇总
最近微软开始向Windows 10用户推送创造者更新(Creators Update),相信也有很多小伙伴已经尝鲜了这一最新的版本.而对于win10的使用体验,很多小伙伴第一个抱怨的问题便是win10 ...
随机推荐
- 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- ArrayList集合不能使用foreach增加、删除、修改元素的原因
大家先看两段代码 第一段代码: List<String> arrayList1 = new ArrayList<String>(); arrayList1.add(" ...
- 仿segmentfault-table横向滚动
问题描述 自己的博客在用移动端访问时,如果table的列数足够多会显示不全,如下图红圈所示 正常情况如图 解决过程 使用chrome发现segmentfault的解决方法是在table上套一个tabl ...
- hadoop之完全分布式集群配置(centos7)
一.基础环境 现在我们有两台虚拟机了,再克隆两台: 克隆好之后需要做三件事:1.更改主机名称 2.修改ip地址 3.将ip地址和对应的主机号加入到/etc/hosts文件中 1.永久修改主机名 hos ...
- python之路-基本数据类型之list列表
1.概述 列表是python的基本数据类型之一,是一个可变的数据类型,用[]方括号表示,每一项元素使用逗号隔开,可以装大量的数据 #先来看看list列表的源码写了什么,方法:按ctrl+鼠标左键点li ...
- 【Oracle】RAC的多实例数据迁移至单机的多实例。
思路:一般的思路可以通过RMAN进行数据的恢复.由于数据库可以停机,因此,这次试用数据泵(expdp,impdp)进行数据 的导入导出. 1.源数据库导出 通过编写导出shell脚本导出数据,如下: ...
- 【原创】(求锤得锤的故事)Redis锁从面试连环炮聊到神仙打架。
这是why技术的第38篇原创文章 又到了一周一次的分享时间啦,老规矩,还是先荒腔走板的聊聊生活. 有上面的图是读大学的时候,一次自行车骑行途中队友抓拍的我的照片.拍照的地方,名字叫做牛背山,一个名字很 ...
- 学习 CSS 之用 CSS 3D 实现炫酷效果
一.前言 把大象关进冰箱需要几步?三步,把冰箱门打开,把大象关进去,把冰箱门关上. 用 CSS 实现 3D 效果需几步?三步,设置透视效果 perspective,改变元素载体为 preserve-3 ...
- (转)SpringBoot :(has no explicit mapping for /error)
转载自:https://www.cnblogs.com/panchanggui/p/9945261.html 异常:This application has no explicit mapping f ...
- 关于BitmapImage EndInit()时报值不在范围内的异常
值不在预期的范围内.ArgumentException 在 System.Windows.Media.ColorContext.GetColorContextsHelper(GetColorConte ...