2 Stimmen

Fehlersuche bei Abstürzen von VBO-Vertexpuffern

Ich verwende die VBO-Erweiterung zum Speichern von Vertex-, Normal- und Farbpuffern (glBindBufferARB) Aus irgendeinem Grund stürzt die Anwendung mit einer Zugriffsverletzung ab, wenn ich die Puffer ändere oder eine Operation ausführe. Wenn ich den Debugger anschließe, sehe ich, dass der Absturz in einem Thread auftritt, der nicht mein Hauptthread ist, der den Opengl-Aufruf mit der Ausführung in einer Dll durchführt, die mit dem Nvidia-Grafiktreiber verbunden ist.

Wahrscheinlich habe ich einem Pufferaufruf einen schlechten Puffer oder eine falsche Größe gegeben. Meine Frage ist also, wie kann ich diese Situation debuggen? Der Absturz scheint einige Zeit nach dem eigentlichen Aufruf und in einem anderen Thread zu passieren.

3voto

NeARAZ Punkte 5897

In der Annahme, dass es hier um Windows geht, hat NVIDIA eine GLExpert Werkzeug. Es kann verschiedene OpenGL-Warnungen/Fehler ausgeben.

In einigen anderen Fällen ist die Verwendung von GLIntercept OpenGL Call Interceptor mit eingeschalteter Fehlerprüfung kann nützlich sein.

Wenn die Werkzeuge nicht helfen, dann ist es die gute alte Fehlersuche. Versuchen Sie, das Problem einzugrenzen und herauszufinden, was genau einen Absturz verursacht. Wenn es sich um ein NVIDIA-spezifisches Problem handelt, versuchen Sie, andere Treiber zu installieren und/oder in den NVIDIA-Entwicklerforen nachzufragen.

0voto

Baxissimo Punkte 2610

Ich glaube, das müssen Sie einfach mit roher Gewalt machen. D.h. kommentieren Sie alle vbo-Zeilen aus, bis Ihr Programm nicht mehr abstürzt. Dann wissen Sie, auf welche Zeilen Sie Ihr Augenmerk richten müssen und können die übergebenen Parameter genau unter die Lupe nehmen.

Versuchen Sie auch, glError()-Aufrufe großzügig über Ihr Programm zu streuen. Wenn Sie einen falschen Parameter übergeben, wird Ihnen glError oft sagen, dass etwas nicht stimmt, bevor es zum Absturz kommt.

-1voto

Torlack Punkte 4287

Eines der besten OpenGl/D3D-Debugging-Tools ist nVidia's NvPerfHUD. Es wird Ihnen nicht helfen, Ihr genaues Problem zu finden, aber es bietet eine andere Sicht auf das, was Sie in die Rendering-Pipeline senden.

Ich muss jedoch sagen, dass ich es nur mit D3D-Anwendungen verwendet habe, so dass ich nicht weiß, ob es bei OpenGL-Programmen so viel hilft.

EDITAR:

Ich bin mir nicht sicher, warum dies abgelehnt wurde. Ich habe bereits VB- und IB-Probleme mit NvPerfHUD behoben. Einfache Dinge wie schlechte primitive zählt und diagnostiziert werden, indem Sie jeden einzelnen Aufruf zeichnen.

0 Stimmen

NvPerfHUD ist in der Tat nur Direct3D, so ist es von keinem Nutzen mit OpenGL, das ist, was die Frage war über. Ich würde vermuten, dass das ist, warum Sie nach unten gestimmt.

0 Stimmen

NvPerfHUD ist für diese Frage/Problemstellung nicht das richtige Werkzeug.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X