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文件的路径。

原文地址:https://www.cnblogs.com/luxieji/p/12636712.html

时间: 2024-10-10 17:15:05

Windows程序卡顿、无响应问题定位的相关文章

工作小记——程序卡顿固定时长

有个问题,困扰我们很久很久很久.甚至每天生产上也会偶然发生几次.最近在测试环境中,更是能在一定压力下必现.那就是程序莫名其妙卡顿,而且时长固定. 截图不是最典型的,10s不到一点.其实大部分都是10s超一点.给人的感觉像是执行了sleep(10000)一样. 应用为 public ResultBean<List<Withdraw>> query(Withdraw tpWithdraw) { List<Withdraw> tpWithdrawQuery = tpWithd

C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法

因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是滚动条出现问题... 网上说用Invoke就可以解决问题,试了一下,可能是我使用的方法不对,还是没有解决问题-_-|| 最后使用InvokeRequired解决的... 因为我的修改DataGridView的代码是写在窗体里面的,so... private static object obj = n

C#多线程解决程序卡顿问题

描述: 在 C# 中,System.Threading.Thread 类用于线程的工作.它允许创建并访问多线程应用程序中的单个线程.进程中第一个被执行的线程称为主线程. 案例: static void Main(string[] args) { int num = 100; for (int i = 0; i < num; i++) { //无参的多线程 noParmaThread(); } } private static void StartThread() { Console.WriteL

Android UI卡顿响应慢性能差怎么办?请用Systrace 来分析查看~

目录 一.Systrace 简介二.Systrace 使用方法三.使用命令行抓取 Systrace四.使用Systrace 检测UI 性能五.使用Systrace 检测警告以及掉帧问题六.查看trace 文件的快捷键七.代码中添加trace 标记具体分析问题所在八.使用TraceView 分析trace Log 一.Systrace 简介 Systrace 允许你收集和检查设备上运行的所有进程的计时信息. 它包括Androidkernel的一些数据(例如CPU调度程序,IO和APP Thread

Android app 性能优化的思考--性能卡顿不好的原因在哪?

说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才感觉运行速度稍微提高了点,就算手机在各种性能跑分软件面前分数遥遥领先,还是感觉无论有多大的内存空间都远远不够用.相信每个使用 Android 系统的用户都有过以上类似经历,确实,Android 系统在流畅性方面不如 IOS 系统,为何呢,明明在看手机硬件配置上时,Android 设备都不会输于 IO

完美解决windows10磁盘占用100%并出现卡顿、假死无反应

完美解决windows10磁盘占用100%并出现卡顿.假死无反应 想必大家也跟我一样,自从用win10系统以后经常会出现这种情况:磁盘突然占用100%然后开始出现假死现象,电脑卡住,点击任何软件没反应,播放的歌曲卡住,主机硬盘灯长亮不闪,过了数秒或者数十秒又恢复正常像是没发生一样…刚开始我也是开使各种求助度娘,然后就有了类似下列的做法:关闭家庭组服务.关闭WindowsDefender.关闭Windows Search.关闭ipv6等等,几乎百度的方法我全试过,结果然并卵好吧,这下百度的方法行不

Windows资源管理器打开文件夹卡顿原因及解决办法

全新安装的 Win8 打开文件夹居然会卡顿,特别是打开EXE程序比较多的文件夹,通过资源监视器查看,幕后凶手就是 Windows Defender 杀毒软件. MSE是微软提供防毒功能,而Windows Defender则是为用户提供反间谍功能,Win8已经把这两个功能合二为一了.用过MSE的用户就知道它有卡EXE的毛病,在Win8中也是这样,当你打开EXE程序.压缩包比较多的文件夹,它就一直扫描啊扫描-..所以MSE很忙-.. 解决方法: 先用Windows Defender全盘扫描,然后可以

记一次程序严重卡顿的经历

前几天在电脑上VS的安装后发现有一程序,叫applicaton verifier是用来记录某一个应用程序执行情况的工具,偶然就将工作中所使用的一个开后程序引入其中,当时并没有仔细研究如何使用. 过了几天因为工作上要使用此程序,启动后发现这个程序启动后Cpu占用非常严重,以致程序中SendKeys在发送Tab键时,这个程序就无响应挂掉了,无耐之下翻源代码定位问题,结果两句代码之间执行居然要30秒左右,无解了,后来将此程序执行文件重新命名后,居然一切正常了. 后来在Windows开始程序中发现这个程

解决IDEA卡顿的问题(Windows和Mac)

IDEA卡顿 最近一段时间经常会在开发的时候感觉到 IDEA 很卡,在一个类里上下滚动或者切换类文件时都能够明显的感觉到,我以为是我项目打开的太多了,毕竟内存优化已经做过了,但是今天实在是被这玩意儿卡的有点烦了,我尼玛,开发机器 16 个 G 的内存,开俩 spring-boot 项目卡成这个逼样??? 最终被逼的去检查了一下 IDEA 的启动配置文件,看到的内容的时候我石化了,配置文件就是默认的,没改动过.还真是活该就这么卡,只给分配了几百兆的最大内存,可不是卡成这逼样吗?后面想了一下,我之前