首页
社区
课程
招聘
[原创]CPU爆高,程序卡顿分析
发表于: 2024-11-1 09:55 2602

[原创]CPU爆高,程序卡顿分析

2024-11-1 09:55
2602

同事说有台PC连接设备,软件非常卡顿,观其CPU爆高。于是收集回来两个dump文件,看看堆栈情况:
dump1
图片描述
dump2
图片描述
对比发现,均为主线程CPU爆满,这也能解释为什么界面卡顿。但是疑惑的是观察堆栈,发现的堆栈信息在软件运行时不可能存在的上下文。大概能猜测现在的dump和pdb文件不匹配。这大概是PE模块在发布前签名造成了二进制发生改变,所以与生产时的PDB版本对不上。于是,祭出X64dbg,通过最上面的栈帧定位到程序对应的崩溃点:
图片描述
通过上下文提示:QImage::width,可以与dump1的最上面的栈帧时匹配的。然后查找该函数的被引用的地方,发现了调用方上下文:
图片描述
再观察提示,最终发现,调用函数为Vision::MatToQImage.接下来,定位源码:
图片描述
通过源码,找到相关模块负责人沟通,确认问题应该是,程序可能开启了相机实时采集,结果不断刷新UI,从而导致了界面卡顿。

总结:

  1. PDB可能会迷惑人,如果觉得可以,可以从最基本的机器码来定位上下文,机器码才是最可靠的,比反汇编代码更可靠;
  2. 通过调试时提供的上下文信息,可以提高定位源码的效率;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-11-1 10:00 被_THINCT编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 105
活跃值: (4608)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

1

最后于 2024-11-14 14:22 被Imxz编辑 ,原因:
2024-11-1 09:57
0
雪    币: 4425
活跃值: (8780)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
Imxz LaserMaker
2024-11-1 10:12
0
雪    币: 58
活跃值: (1145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

PDB版本对不,符号应该load不上吧,除非强制load。

最后于 2024-11-1 22:18 被yangya编辑 ,原因:
2024-11-1 22:18
0
雪    币: 0
活跃值: (782)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5

学会了,太牛了,帮我解决了卡顿的问题。
查看cpu消耗   !runaway
切换到指定序号(假设序号为 x)的线程   ~xs
然后查看调用堆栈窗口

最后于 2024-11-28 17:32 被AntiPsycho编辑 ,原因:
2024-11-28 17:07
0
游客
登录 | 注册 方可回帖
返回
//