同事说有台PC连接设备,软件非常卡顿,观其CPU爆高。于是收集回来两个dump文件,看看堆栈情况:dump1 dump2 对比发现,均为主线程CPU爆满,这也能解释为什么界面卡顿。但是疑惑的是观察堆栈,发现的堆栈信息在软件运行时不可能存在的上下文。大概能猜测现在的dump和pdb文件不匹配。这大概是PE模块在发布前签名造成了二进制发生改变,所以与生产时的PDB版本对不上。于是,祭出X64dbg,通过最上面的栈帧定位到程序对应的崩溃点: 通过上下文提示:QImage::width,可以与dump1的最上面的栈帧时匹配的。然后查找该函数的被引用的地方,发现了调用方上下文: 再观察提示,最终发现,调用函数为Vision::MatToQImage.接下来,定位源码: 通过源码,找到相关模块负责人沟通,确认问题应该是,程序可能开启了相机实时采集,结果不断刷新UI,从而导致了界面卡顿。
总结:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
1
Imxz LaserMaker
PDB版本对不,符号应该load不上吧,除非强制load。
学会了,太牛了,帮我解决了卡顿的问题。查看cpu消耗 !runaway切换到指定序号(假设序号为 x)的线程 ~xs然后查看调用堆栈窗口