程序界面无响应代码分析方案
1. 下载 Process Explorer.exe(32位)、WinDbg.exe分析工具。
可以自行去网上下载,也可以使用下面提供好的下载地址:
链接:https://pan.baidu.com/s/1ZKNH7l7-xQzryOoH6jMHbg 提取码:4N5c
2. 右键管理员启动 Process Explorer.exe 程序(我们程序32位,要用32程序抓取),抓取Dump文件保存本地,如图:
3. 用WinDbg.exe分析Dump文件
3.1. 配置程序集调试符号地址:srv*c:\symbols*http://msdl.microsoft.com/download/symbols
3.2. 打开要分析的Dump文件
3.3. 添加sos:.load C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll
注意:32位和64位的SOS地址可能不一样(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll),根据自己电脑的情况做调整。
3.4. 用 .chain 命令查看SOS是否加载成功,成功如下:
3.5. 用 !runaway 命令,查看每个线程CPU执行时间(也可以通过 !threads 命令查看线程数)
3.6. 选择如上中一个耗时不为0的线程,执行如下命令:~0s
3.7. 用 !clrstack 命令,查看这个线程中托管代码调用堆栈,若报错如下图:
3.8. 解决上述错误命令:.cordll -ve -u -I mscorwks -l ,执行完成后,再次执。
3.9. 也可以通过 !dso 命令查看当前的堆栈对象。
4. 行 !clrstack 命令,可以定位出当前正在运行线程执行代码所在行: