调试 Linux 下的 XRender(X11 Render Extension) 通常分为几个层次:确认是否启用、定位渲染问题、追踪性能或黑屏/花屏、以及使用工具深入分析。下面给你一套系统化调试思路,从最简单到深入。
xdpyinfo | grep -i render
正常输出类似:
X Rendering Extension
如果没有,说明 X server 未启用 XRender。
grep -i render /var/log/Xorg.0.log
常见关键词:
Loading extension GLXXRenderComposite如果看到 disable 或 not supported,说明被禁用或驱动不支持。
xpropxprop | grep RENDER
然后点击窗口,看是否有 RENDER 相关属性。
xtrace(推荐)sudo apt install xtrace
xtrace your_app
可以查看:
X_RenderCreatePictureX_RenderComposite如果完全没有 Render 请求,说明应用没走 XRender。
✅ 确认 Composite 扩展开启:
xdpyinfo | grep Composite
✅ 手动开启(临时):
xcompmgr &
glxinfo | grep "renderer string"
如果看到:
llvmpipe
说明是 CPU 渲染,XRender 性能会很差。
✅ 解决:
llvmpipexscope(最底层)sudo apt install xscope
xscope -v
可以看到 所有 X11 + Render 请求,适合:
xwininfo + xpropxwininfo -root
xprop -root
查看:
export XLIB_DEBUG=1
./your_app
会输出大量 Xlib 调用信息(包括 Render)。
XRenderFindVisualFormat(display, visual);
调试重点:
PictStandardARGB32PictStandardRGB24BadPicture (invalid Picture parameter)
原因:
✅ 解决:
XRenderFindVisualFormat()
XRenderComposite(...)
但画面没变。
✅ 检查:
XFlush()src / mask / dst| 问题 | 检查命令 |
|---|---|
| XRender 是否启用 | xdpyinfo |
| 是否使用 Render | xtrace |
| 是否 Composite | xdpyinfo |
| GPU 是否工作 | glxinfo |
| 驱动问题 | Xorg.0.log |
你可以直接告诉我:
我可以给你 针对性的调试方案或最小复现代码。