调试 XRender 错误通常需要从 X11 / XRender 扩展、驱动、应用层 三个层面入手。下面给你一套比较系统的排查思路,适用于 Linux 桌面环境(X11)。
echo $XDG_SESSION_TYPE
如果是 wayland,XRender 可能根本没用或被绕过。
xdpyinfo | grep RENDER
正常应看到:
RENDER
如果没有,说明 X Server 没加载 XRender。
常见原因:
✅ 排查方法:
export XRENDER_DEBUG=1
然后启动程序(部分程序支持)。
这是 X11 错误,通常来自:
✅ 调试方法:
export LIBX11_SYNCHRONIZE=1
这样 X 错误会立刻触发,而不是延迟报错。
运行程序时观察:
./your_app 2>&1 | grep -i render
常见于:
✅ 检查是否回退到软件渲染:
export XRENDER_GL=1 # 有些环境支持
或查看 Xorg 日志:
grep -i render /var/log/Xorg.0.log
xtrace(强烈推荐)可以追踪 X11 / XRender 请求:
xtrace your_app
能看到:
apitrace(适合图形问题)如果 XRender 问题在 OpenGL / 混合层:
apitrace trace your_app
apitrace replay trace.dump
xscope比 xtrace 更底层:
xscope -v
常见错误:
XRenderFreePicture(dpy, picture);
// 之后又用 picture
✅ 建议:
NoneNoneXRenderPictFormat *fmt = XRenderFindVisualFormat(dpy, visual);
if (!fmt) {
// 错误
}
XRenderComposite(
dpy,
PictOpOver,
src, mask, dst,
src_x, src_y,
mask_x, mask_y,
dst_x, dst_y,
width, height
);
常见错误:
None 但传了坐标xf86-video-intelxf86-video-amdgpukillall picom
killall compiz
再测试是否仍有问题。
xdpyinfo | grep RENDER 存在LIBX11_SYNCHRONIZE=1 运行xtrace 抓 XRender 调用/var/log/Xorg.0.log如果你愿意,可以把 具体错误信息 / 调用栈 / 使用场景(Qt / GTK / 自写 Xlib / 浏览器) 发出来,我可以帮你精确定位是哪一层的问题。