近日遇到QT应用退出时crash,非必现,但发生概率超过70%。
尝试用设断点debug,单步trace等方法来查找crash点,但是几乎每次死在不同的地方。基本上,QT应用在关闭退出时,主要做一些析构和销毁资源的操作。
到底是什么导致应用退出时crash呢?想起开发新功能之前的版本应该是稳定的,遂下载了一个老版本的代码编译测试。果然老版本的软件退出没有crash。推测应该是新增的代码有问题引入了crash。
祭出2分法分割新增的代码块,先屏蔽更新界面的功能,crash现象还是重现。继续屏蔽其他部分的代码,再测试是否crash。直到剩下最后2个函数,关闭其中一个函数,不再crash了。重点review这个嫌疑最大的函数。
最后发现这个函数确实有问题,函数内部的一个double数组,居然在更换输入参数后,数组写入越界了。并且越界有一定随机性,并非每次都发生!(前人遗留代码,前人挖坑,后人掉坑里)
重写这个坑人函数,最后解决应用退出时crash的问题。
小结:
1. 在QT中,数组写入越界,未必会在运行时就crash,但是越界造成内存里临近的其他对象变量被破坏了。在应用退出时,析构被破坏的对象变量时,引发各种crash。
2. 断点trace等方法在定位随机crash的问题上有一定局限性;通过在最近的稳定版本基础上,分部分屏蔽新增代码,逐步排查的方法,看似繁琐,耗时耗力,速度慢,实则是效率比较高的办法。
qt应用退出时crash
最新推荐文章于 2024-05-27 14:14:50 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言
2402

被折叠的 条评论
为什么被折叠?



