【问题标题】:Understanding Xlib Failed Requests了解 Xlib 失败的请求
【发布时间】:2012-02-23 04:57:30
【问题描述】:

没有过多的细节(我在这里寻找调试技术),我想了解如何更好地调试 Xlib 失败的请求。特别是处理 glx 扩展。我正在解决的错误发生在我的应用程序中的一个复杂位置,因此无法尝试将其拆开以提供一个小示例。

话虽如此,我看到的失败请求是

x10:  fatal 10 error 11 (Resource temporarily unavailable) on X server ":0.0"
      after 46 requests (46 know processed) with 0 event remaining.
X Error of failed request: BadAccess (attempt to access private resource denied)
  Major opcode of failed request: 135 (GLX)
  Minor opcode of failed request: 5 (XGLMakeCurrent)
  Serial number of failed request: 46
  Current serial number in output stream: 46

我可以通过调试器单步执行来查看问题出在哪里。但是,我无法完全辨别为什么会发生这种情况。

【问题讨论】:

    标签: x11 xlib


    【解决方案1】:

    在哪里查找的线索是扩展名和请求本身的名称。不幸的是,在这种情况下,由于您使用了Xgl,这并没有太大帮助。但是您可以通过查看类似glproto 的协议文档来检查请求的真正含义。从中可以看出请求确实是glxMakeCurrent。然后,您只需要找到该请求的文档或代码。

    GLX 规范说,如果“上下文对某个其他线程来说是当前的”,glxMakeCurrent 将给出BadAccess

    现在,您的错误是关于 XGLMakeCurrent 的,它是 Xgl 的实现细节。但是从读取这个函数的实现,它会传递到底层的 GLX 实现。

    为了解决您的问题,我建议您尝试确定该上下文是否正在另一个线程中使用。

    【讨论】:

      【解决方案2】:

      对于调试,您希望打开同步请求,这会减慢您的代码速度,但会使每个 X 请求等到服务器处理它后再继续,并立即返回错误。您可以使用

      打开它
      XSynchronize(display, True);
      

      现在您将在导致问题的例程中遇到 X 错误,并且可以从那里使用标准调试工具。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-18
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多