我在Rust中开发了一个基于gtk +和webkit2gtk的Web浏览器,有时候,所有GTK +窗口都变黑了。
即使我们使用环境变量GTK_DEBUG=interactive
获得的gtk检查器窗口也是黑色的。
即使认为窗口是黑色的,UI仍然是响应式的,因为我可以使用键盘浏览网页(我看到窗口标题更新,显示新页面URL和加载进度)。
以下两种操作会在每次发生时触发此问题:
遗憾的是,我不遗余力地重现了这个问题。如果你愿意,我可以向你展示项目的代码,但它很大,非常重要,并且在gtk +上使用了许多抽象层。
我知道我不会给你很多帮助,但如果你能给我一些关于渲染如何工作以及如何调试的解释,我们将非常感激。
您能否就如何调试此问题给我一些提示?
GTK +窗口是否有全局OpenGL(或其他)上下文?
是否有一些调试工具可以帮助我? (设置G_MESSAGES_DEBUG=all
没有显示任何相关内容。)
答案 0 :(得分:1)
使用strace
,我能够调试此问题:
我发现用于IPC通信的FD在关闭后仍然被轮询,所以它返回POLLNVAL
。
使用g_source_remove_unix_fd()
删除FD修复了此问题。