UOS+KIRIN截屏出错研究

简介: UOS+KIRIN截屏出错研究

泰OFFICE有个BUG,说在UOS+KIRIN系统上,截屏卡死。在KYLIN和其他UOS上,则正常。这么怪异的问题,当然很难解决。只能由吾出场,从JDK角度来看看。


 使用的是Robot进行屏幕。于是吾进行跟踪,出错顺序依次是:


Robot.createScreenCapture()

XRobotPeer.getRGBPixels

XRobotPeer.getRGBPixelsImpl()

awt_Robot.c:getRGBPixelsImpl

 这里已经是C了。在这里进行跟踪,发现是compositeGetOverlayWindow导致的。吾仔细想了半天,莫非是窗口产生了没有释放?那找找有没有对应的释放函数。别说,还真找到了一个释放函数:XCompositeGetOverlayWindow。加上之后,果然不死了。


https://www.linuxhowtos.org/manpages/3/XCompositeGetOverlayWindow.htm


 不死的问题解决了,拿到的是黑屏,也就是没有得到数据。于是又进行了跟踪。


awt_Robot.c:getWindowImage

multiVis.c:ReadAreaToImage

通过对比正确顺序,发现:正确的时候XGetImage()返回结果,错误的时候为NULL。


于是进行了修改:如果有数据设置一个标志;返回时根据标志来决定返回对象还是NULL。


为什么没有数据呢?这个没有进一步分析。


 实际上这个系统也能截屏。不知道是系统版本问题(比如UI不一样)?还是显卡适配问题?

目录
相关文章
|
9月前
|
Linux 测试技术
Linux基础项目开发1:量产工具——文字系统(四)
Linux基础项目开发1:量产工具——文字系统(四)
77 0
Linux基础项目开发1:量产工具——文字系统(四)
|
缓存 数据可视化 搜索推荐
Windows 上这些「点一下」就省 N 步的自动化软件,让你的效率快如火箭
Windows 上这些「点一下」就省 N 步的自动化软件,让你的效率快如火箭
882 0
麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo
上一篇,通过研究,可以定位到函数,本篇进一步优化,没有行数,程序较为复杂的时候,就无法定位,所以进一步定位。   本篇做了qBreakpad的研究,但是没有成功,过程也还是填出来,后来突然注意到gdb出现行数的方法,并通过了几轮测试以及实战,确实可以定位到行数,所以为了大家方便,把国企麒麟上的Qt崩溃方法分享出来。   本篇文章比较长,就不分篇了,同时还做了专项测试。
麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo
|
NoSQL Ubuntu
麟系统开发笔记(十):在国产麒麟系统上使用gdb定位崩溃异常方法流程以及测试Demo
本篇就适合代码崩溃的方法,可以定位到代码崩溃原因,测试Demo。
麟系统开发笔记(十):在国产麒麟系统上使用gdb定位崩溃异常方法流程以及测试Demo
|
程序员
苹果电脑截屏的几种办法
苹果电脑截屏的几种办法
761 0
|
安全 数据安全/隐私保护 Windows
免费录屏、最快截图、装X必备、看完工作学习效率直接翻倍
免费录屏、最快截图、装X必备、看完工作学习效率直接翻倍
314 0
|
人工智能 算法 安全
IBM宣布放弃人脸识别!不做种族主义帮凶?还是业务不行取悦民众?
IBM宣布放弃人脸识别!不做种族主义帮凶?还是业务不行取悦民众?
155 0
搜狗输入法软件分析
1.用户界面:有各种皮肤可以使用,但是大多华而不实,没有真正简约的一种设计。 2.记住用户选择:自己经常用的词会在输入时提示,有记忆词库的功能。 1.短期刺激、长期使用的好处坏处:短期使用会让人眼花缭乱,长期会适应操作。 2.不要让用户犯简单的错误:会有快捷键冲突。
857 0