QT界面刷新崩溃 人也快崩溃了...

h171887404 2014-07-09 06:02:56
前后被这个问题困扰一个月。

有个用QT的项目从去年做到现在,最几个月验证人员在验证产品。验证中最严重的一个问题就是机器开久了就死机,时间从4-10小时都有可能,提示的问题就是segment fault。

然后我就开始找原因,先是编译成X86版本在PC仿真,开上几天都不出现错误。加大数据量,加入错误数据,怎么搞都不出问题...编译了ARM的GDB在线远程调试,又只能看汇编文件,找不出那里错误。没办法,用最笨方法,在代码里面容易出现段错误、内存溢出、越位的地方查找。几乎把代码翻了遍,调试无数,无果。

最后一个偶然机会,发现界面刷新多了,就容易出错。遂写了测试程序,建了工程,在界面上不断去刷新一个QWidget的背景颜色。挂了一整天,刷到10万次就出错。我去...啥都没写,这样就会出错? QT库我移植有问题? 然后我就开始找移植问题的。整了好长一段时间,从4.5到4.8.6换了好几版本...无果.... 不管怎么弄,QT界面,不管是文字图片还是颜色,只要刷新次数多了就出错。把QT界面新建出来,但是没有show,不显示,其他代码该跑则跑。这样出来就没问题了....难道FB驱动有问题?翻箱倒柜找了块开发板,把程序放上去开始跑....如果换个环境一点问题都没有。终于看到一线曙光了。把这个问题反应给搞驱动的同事,让他检查这显示驱动有没有啥问题。搞了几天,得到答复是驱动跟我用来测试开发板的上驱动是一样的,当时就是直接抄的。
唉...这个时候真是感叹自己水平实在太水了 毕业工作后第一个项目,就一个死机问题搞不定....

有谁遇到过这个问题吗?谁能点解决问题的方向啊
...全文
3271 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2016-07-26
  • 打赏
  • 举报
回复
恭喜楼主啊!我曾经提到过显卡驱动哦。我当时遇到的问题跟你比较接近,元原因就是显卡驱动的问题, 我没裁剪内核的时候没有选framebuffer导致显卡驱动intel i915的驱动不起来,然后我们就用了vesa的驱动,vesa无法使用硬件本身的OpenGL,结果前边是死机,后边是播放视频非常慢,CPU占用很高,后来把inteldrmfb和intelfb都打入内核就好了
h171887404 2016-07-25
  • 打赏
  • 举报
回复 1
两年前的问题...终于得出结论...竟然是显示驱动的问题,由于TI的AM335X的BUG 在16位模式下,蓝色跟红色颠倒了过来,编程了BGR。做驱动的把这个问题改了过来,但是改岔了...到后期,软件开起来几天后,会导致串口崩溃,误导我们在串口上找问题。 总之,由于显示驱动问题,刷屏的时候导致未知的内存错误。这个内存错误当且仅当在运行QT且高负载的时候,错误形式为系统串口崩溃,且不可恢复。 解决办法:回退到最早的显示驱动。修改QT源码,颠倒红色跟蓝色的偏移地址。 PS:感慨啊...被这个问题困扰了我两三年,期间产品却一直在生产销售。像一朵无形的乌云笼罩了我。期间各种因素,导致这个问题拖了那么久才被发现。
wanglovec 2015-08-24
  • 打赏
  • 举报
回复
现在解决了? 怎么没有下文了?
d245007664 2015-08-21
  • 打赏
  • 举报
回复
不知道楼主问题解决没有,我也遇到你一样的问题了!
1987andy 2014-11-05
  • 打赏
  • 举报
回复
QT还在完善中,所以目前都会存在很多问题,而且这块资料确实少的可伶 面对楼主的问题,我觉得十万次级别的刷新操作楼主应该要想到会死机的,所以在内部自己要做一些处理预防这种问题,比如在没有任何改变或者操作情况下避免去频繁的刷新或者加延迟刷新,同时这种程度的刷新对硬件也是一种考验哈
yxred 2014-11-04
  • 打赏
  • 举报
回复
你是个高手,我也经常遇见问题不能解决.Qt资料的确比MFC少
sapourfang_ustc 2014-11-03
  • 打赏
  • 举报
回复
@foxyz 你们当时是什么问题啊 怎么解决的啊
sapourfang_ustc 2014-11-03
  • 打赏
  • 举报
回复
我用memtester测试ddr发现有failure. 应该不是framebuffer问题啊 我单独测framebuffer怎么测都没问题
donwmufromdying 2014-11-03
  • 打赏
  • 举报
回复
这个,貌似是4月前的问题了,我觉得也许是framebuffer+显卡OpenGL的问题。我也曾经碰到过。后来我们把linux内核重新裁剪过。对了,你可以用vesa显卡驱动来试试。
sapourfang_ustc 2014-11-03
  • 打赏
  • 举报
回复
我们现象跟你不一样 framebuffer是我自己写的 qt是跑在arm板子上的 qt界面不断刷新,大概跑个十几个小时后 qt程序退出或者内核崩溃 现在在做linux端的memtest程序 发现有failure情况 现在准备降频测试一下
donwmufromdying 2014-11-03
  • 打赏
  • 举报
回复
对了,为了能正常使用fb,我们修改了grub中启动项,把apci=off去掉了
donwmufromdying 2014-11-03
  • 打赏
  • 举报
回复
我没裁剪内核的时候没有选framebuffer导致显卡驱动intel i915的驱动不起来,然后我们就用了vesa的驱动,vesa无法使用硬件本身的OpenGL,结果前边是死机,后边是播放视频非常慢,CPU占用很高,后来把inteldrmfb和intelfb都打入内核就好了
sapourfang_ustc 2014-11-01
  • 打赏
  • 举报
回复
请问楼主现在问题可解决了 我们也遇到类似问题 求大神拯救
zhouguoji 2014-07-10
  • 打赏
  • 举报
回复
引用 楼主 h171887404 的回复:
前后被这个问题困扰一个月。 有个用QT的项目从去年做到现在,最几个月验证人员在验证产品。验证中最严重的一个问题就是机器开久了就死机,时间从4-10小时都有可能,提示的问题就是segment fault。 然后我就开始找原因,先是编译成X86版本在PC仿真,开上几天都不出现错误。加大数据量,加入错误数据,怎么搞都不出问题...编译了ARM的GDB在线远程调试,又只能看汇编文件,找不出那里错误。没办法,用最笨方法,在代码里面容易出现段错误、内存溢出、越位的地方查找。几乎把代码翻了遍,调试无数,无果。 最后一个偶然机会,发现界面刷新多了,就容易出错。遂写了测试程序,建了工程,在界面上不断去刷新一个QWidget的背景颜色。挂了一整天,刷到10万次就出错。我去...啥都没写,这样就会出错? QT库我移植有问题? 然后我就开始找移植问题的。整了好长一段时间,从4.5到4.8.6换了好几版本...无果.... 不管怎么弄,QT界面,不管是文字图片还是颜色,只要刷新次数多了就出错。把QT界面新建出来,但是没有show,不显示,其他代码该跑则跑。这样出来就没问题了....难道FB驱动有问题?翻箱倒柜找了块开发板,把程序放上去开始跑....如果换个环境一点问题都没有。终于看到一线曙光了。把这个问题反应给搞驱动的同事,让他检查这显示驱动有没有啥问题。搞了几天,得到答复是驱动跟我用来测试开发板的上驱动是一样的,当时就是直接抄的。 唉...这个时候真是感叹自己水平实在太水了 毕业工作后第一个项目,就一个死机问题搞不定.... 有谁遇到过这个问题吗?谁能点解决问题的方向啊
。。。。。。。。。。。。。。。。。。。
h171887404 2014-07-10
  • 打赏
  • 举报
回复
引用 7 楼 zhxianbin 的回复:
arm交叉编译远程调试是可以看源码的,楼主做硬件的,没有做软件的同时配合吗 不过这种不易复现的问题,单步也不好办
我上次我来论坛问过,搞了很久才把GDB调试通,但是在PC的QTC只能看到汇编,也不知道那里弄错了。我设计的硬件还有做QT的软件,但是linux驱动不会,有个做驱动的同事配合。但是那个同事现在没什么空,偶尔给你调一下。毕竟自己的项目,自己多花点心思。
zhxianbin 2014-07-10
  • 打赏
  • 举报
回复
arm交叉编译远程调试是可以看源码的,楼主做硬件的,没有做软件的同时配合吗 不过这种不易复现的问题,单步也不好办
h171887404 2014-07-10
  • 打赏
  • 举报
回复
引用 1 楼 adq1_2 的回复:
segment fault一般绝大部分都是自己代码写得有问题! 按你说的情况的话,我猜你项目用的机器的硬件估计性能或者兼容性方面也有可能? 这项目机器的硬件定型了吗?还能换吗?如果有可能能换的话,一个简单的办法是:换成和你测试了没问题的那个尽量类似甚至相同的!
这个硬件是我设计的,基本上就是潮的那块开发板的。要说差别的,就是DDR跟FALSH的容量...都是同系列同参数。然后就是布板。现在准备给平台降降速,把DDR3跟CPU的速度降下来试一下。
h171887404 2014-07-10
  • 打赏
  • 举报
回复
引用 4 楼 jiangcaiyang123 的回复:
ARM交叉编译的时候不能源码调试?
额...不懂,请赐教。不过代码应该是没有问题的。你看我的说明就知道了,仅仅刷新显示就会有问题,要有问题也只可能是QT代码的问题。而且从其他平台上,貌似QT代码也没问题。
彩阳 2014-07-10
  • 打赏
  • 举报
回复
ARM交叉编译的时候不能源码调试?
h171887404 2014-07-10
  • 打赏
  • 举报
回复
引用 2 楼 jiangcaiyang123 的回复:
可以调试运行吗?使用Qt的源码调试版本进行调试,如果是Qt的问题,那么一旦报SEGSEV错误,那么调试器会暂停在C++代码上的。
在PC机可以源码调试,但是调试不出错误。在ARM板上可以远程调试,但是只能调试汇编程序。但这不重要啊....
加载更多回复(6)

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧