2012-02-23 13 views
1

あまり詳しく説明しませんが(私はここでデバッグのテクニックを探しています)、Xlibが失敗した要求をよりよくデバッグする方法を理解したいと思います。特に、glx拡張を扱う。私が戦っているバグの出現は、私のアプリケーション内の複雑な場所にあり、ここで小さなサンプルを提供するためにそれを引き離そうとすることは不可能です。それとXlibの失敗したリクエストの理解

は、私が見ていなかった要求は問題がデバッガでステップスルーによって引き起こされている場合、私は見ることができます

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 

であると述べました。しかし、なぜそれが起こっているのか完全には分からない。

答えて

2

見える場所は、拡張子の名前と要求自体の名前です。残念ながらこの場合はXglを使用しているため、これはあまり役に立ちません。しかし、あなたはglprotoのためのこのようなプロトコルのドキュメントをチェックすることによって、本当にリクエストが何であるかを確認することができます。これで、リクエストが実際にglxMakeCurrentであることがわかります。次に、そのリクエストのドキュメントまたはコードを見つけるだけです。

GLXの仕様では、は、 "コンテキストが現在の他のスレッドのコンテキストである"場合、BadAccessと表示されます。

ここで、エラーはXGLMakeCurrentであり、実装の詳細はXglです。しかし、この関数の実装を読むことから、それは根底にあるGLXの実装に伝わります。

問題を解決するには、そのコンテキストが別のスレッドで使用されているかどうかを確認することをお勧めします。

1

同期要求をオンにしたい場合は、コードが遅くなりますが、処理を続行してエラーをただちに返すまで、すべてのX要求を処理します。

XSynchronize(display, True); 

これで問題を引き起こしたルーチンでXエラーが発生し、そこから標準デバッグツールを使用できます。

関連する問題