在 Linux 下调试 X Render(X11 Render Extension,Xrender),通常目标是:
下面按常用调试手段和典型场景来说明。
xdpyinfo | grep RENDER
输出类似:
RENDER
说明 Xrender 扩展已加载。
X -version
或
grep -i render /var/log/Xorg.0.log
xtrace(强烈推荐)用于跟踪 X11 协议请求,包括 Xrender。
sudo apt install xtrace
xtrace your_x11_app
可以看到类似:
RenderComposite src=0x4a00001 ...
✅ 适合调试:
xscope比 xtrace 更底层,适合协议级调试。
sudo apt install xscope
xscope -v
然后让程序连接 DISPLAY=:1 等。
Xrender 的核心是 Picture。
常见错误:
调试方法:
XRenderFindVisualFormat 返回值XRenderCreatePicture 是否成功示例:
XRenderPictFormat *fmt = XRenderFindVisualFormat(dpy, vis);
if (!fmt) {
fprintf(stderr, "No pict format\n");
}
XRenderComposite(
dpy,
PictOpOver,
src,
mask,
dst,
src_x, src_y,
mask_x, mask_y,
dst_x, dst_y,
width, height
);
常见错误:
✅ 调试建议:
export LIBGL_DEBUG=verbose
export MESA_DEBUG=1
(对 Xrender 本身帮助有限,但可排除 GL 干扰)
XSynchronize(dpy, True);
✅ 好处:
int xerror_handler(Display *dpy, XErrorEvent *err) {
char msg[256];
XGetErrorText(dpy, err->error_code, msg, sizeof(msg));
fprintf(stderr, "X Error: %s\n", msg);
return 0;
}
XSetErrorHandler(xerror_handler);
Xrender 常见错误:
BadPictureBadMatchBadDrawableXRenderFillRectangle(dpy, PictOpSrc, picture, &color, 0, 0, w, h);
export XRENDER_SYNC=1
xdpyinfo | grep Composite
✅ 最常用组合
xtrace your_app
XSynchronize(dpy, True)
XSetErrorHandler
✅ 图形异常
你可以告诉我:
我可以直接帮你 定位代码级问题。