Windows程序卡顿、无响应问题定位
2021-03-11 11:32
标签:ram sdk ref rod 目录 too 如何 选择 service 当windows程序出现异常、界面卡顿、无响应情况时,在有工程和源码的情况下,程序员通常是打开IDE,在DEBUG模式下进行调试。但如果是一个RELEASE程序,且无调试环境,该如何来定位呢。 这里介绍一下通过adplus导出dump文件,用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对话框程序,添加了一按钮,点击按钮会进入死循环。 点击“死循环”按钮,程序出现无响应的情况。 这个时候需要用到adplus了。如果winsdk正常安装的话,windbg 和 adplus 会存放在“C:\Program Files (x86)\Windows Kits\10\Debuggers\x86”路径下。 adplus 具有两种操作模式: adplus 的具体使用就不做介绍了,这里仅用到 Hang 模式,用来抓取程序的快照,导出dump文件。 在控制台执行上述命令,执行成功的话会有类似如下打印,并在“e:\dumps”目录下生成dump文件。 接下来,打开windbg,点击“File”->“Open Crash Dump...”,选择刚才导出的dump文件。 然后在windbg下方的命令行输入kb,windbg会打印出当前进程的调用栈。 一般来说,通过查看进程的调用栈,就能大概知道程序出错的地方了。 如果无法显示符号名称,请点击“File”->“Symbol File Path...”来设置pdb文件的路径。 Windows程序卡顿、无响应问题定位 标签:ram sdk ref rod 目录 too 如何 选择 service 原文地址:https://www.cnblogs.com/luxieji/p/12636712.htmlwindbg
一个例子
void CtestDlg::OnBnClickedButtonLoop()
{
while (true) {}
}
adplus -hang -pn test.exe -quiet -o e:\dumps
文章标题:Windows程序卡顿、无响应问题定位
文章链接:http://soscw.com/index.php/essay/63189.html