Qt主线程卡死,竟然与X11 的 _XReply() 有关

在ubuntu系统下运行Qt程序

Qt的程序就相当于X11的一个客户端,受X11的限制

近期,在处理一起离奇事件,发现UI的qt界面已经卡死了,无鼠标键盘任何反应

但程序是运行的,比如与其他设备通信是正常的,说明程序本身没有死掉。

通过断点,发现所有的槽均失效了

如果重启应用程序,可以恢复正常的。

出现的概率不大,但总能出来,总的来说是没有找到规律。

一开始,一直怀疑程序本身代码出现出现,比如槽函数里出现死循环等,因为这样比较适合解释现象。

当出现问题的时候,通过GDB调试,发现x11卡在某个函数地方

提示:libX11.so.6  _XReply()

百思不得其解

难不成X11的bug?

从现象看,的确存在漏洞,x11会出现死等的情况

因此,解决办法:

1. 去x11网站看看,有没有类似问题,的确也有,已经在下一个版本上解决了,正好,拿来编译下,替换掉原先的,发现问题的确再也不出现了

2. 自己修改x11的源码,也是可以的,就是把wait那个地方改成不要死等,就可以了

mark一下

 另外,最近也一直在处理linux的疑难杂症,特别是涉及到两起UI相关

也花了点时间,了解下linux一些机制。

Linux是开源的,因此,就各大帮派林立,除了内核还相对纯洁,其他真的五花八门,

而实际项目,也或多或少受到核心板开发商的影响(一般来说,某款核心板,可以使用哪个系统,哪个版本的内核,都是有一定限制,

如果换版本,换系统都比较麻烦,一般核心板供应也不会技术支持)

因此,碰到类似“系统”级别的问题,往往束手无策,当出现概率又比较低的时候,更是头疼,这就需要解决人员的很高的要求(说实在的,

每每在解决问题的时候,总感觉自己是新手)

以下这张图蛮好的,mark。不幸的是,一个月内,处理了图中的两个地方的bug!好在结局还算顺利

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值