在我们软件运行的时候,偶尔会出现CPU占比100%的问题,而且极其不容易排查,概率极低,我硬是操作了一个下午,出现了一次,然后找到了dmp文件,也没有任何的规律,那么就可以借助windbg进行分析。
现象就是
1.解决此问题,首先让软件出现此问题,然后找到任务管理,点击创建转储文件后,会生成dmp文件
2.这个dmp文件非常的大,我这个1.9G
3.在微软商店下载
4.打开后是
5.选择需要分析dmp文件
6.有些电脑需要下载一些dll,下载完成后,就是下面的样子
7. !t,命令是查询托管线程的,(对这个问题没有帮助)
8. ~*e !dumpstack,查询线程栈
这个命令执行后,有大量的信息,需要一个一个的看,会看到下面的报错
其实问题已经发现了,就是非安全线程集合导致的问题
9.~*e !clrstack,使用此命令会让错误更加的清晰
里面会看到大量的异常信息
10.其实在这里就可以在代码里面全局搜索
xxxxxx.Collect.DoException() 这个方法,就算是调用另外一个dll,那么搜索命名空间也能找到
11.当然,我们可以使用命令,把这个报错的dll导出去
!ip2md 00007ffe6a6d00cf
12.此命令就是把错误的代码保存成dll
!savemodule 00007ffe6a8c2d60 D:\1\1.dll
13.最终就能看到这个dll
14.最后用反编译工具,直接就定位这里了
15.因为这个问题,我知道是怎么发生的,所以看到这里就明白了,此处是非安全线程造成的,所以解决的办法,就是加锁,或者换成安全线程集合即可,最后完美解决,经过几天的测试,再也没有出现CPU100%的问题了。
最后感谢 一线码农 的指导
https://www.cnblogs.com/huangxincheng/p/14783766.html
来源:使用WinDbg分析CPU100%的问题-CSDN博客