任务管理器查看CPU异常进程

如图,进程testdbg.exe的进程ID为15164,CPU长时间占用19%左右。
使用procdump创建dmp
命令: procdump -ma -c 10 -s 2 15164
意思是当进程ID 15164的CPU>=10%超过2秒时,收集dmp文件。
执行命令后,可以看到如下信息:

如图,监控到进程CPU25%持续了2秒。
然后生成了dmp文件testdbg.exe_230306_221355.dmp。
配置windbg环境
运行windbg软件。
配置pdb文件路径。
界面左上角菜单:
文件--符号文件路径,加上testdbg.exe相关编译生成的PDB文件路径。
加载dmp文件
把前面捕获的dmp文件testdbg.exe_230306_221355.dmp拖到windbg界面打开。
得到如下打开dmp文件后效果:

分析CPU异常代码
1.查看各线程CPU时间。
windbg命令: !runaway
意思是分析各线程CPU时间。执行命令后,结果如下图所示:

执行命令后,可以看到:
共3个线程,其中 0 号线程ID为3ea0,CPU时间为41.828秒.
我们需要查看0号线程的堆栈,查看执行什么代码。
切换到耗CPU时间的线程
命令: ~0s
切换到0号线程。

左下角显示的数字,就是第几号线程。
3.查看耗CPU时间的线程堆栈
命令:kb
意思是查看当前线程堆栈
执行命令后如下图:

可以知道,代码执行到了mydll3.cpp的53行。
4.查看源码
具体代码如下:

一个死循环导致了CPU高。