Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

24.11.2012, 00:56

Unhandled exception in ntdll.dll, nvoglv32.dll, vrfcore.dll

Ich habe mir irgendwie einen richtig fiesen Bug eingefangen - mal wieder :dash:

Diesmal stürtzt mein Programm immer wieder bei "wglDeleteContext" ab. Der übergebene GL Context ist aber garantiert ein gültiger.
Und die ganze Zeit hat an der Stelle auch noch alles funktioniert. Folgende Fehlermeldung tritt ständig auf, aber ganz selten nicht (ist also kein 100%ig kontinuierlicher Fehler).
Manchmal stürtzt das Programm auch schon zu Beginn ab, meistens wenn ich mit Shadern arbeite.

Quellcode

1
Unhandled exception at 0x039A7410 (nvoglv32.dll) in TutorialShaderLibrary.exe: 0xC0000005: Access violation reading location 0xFEEEFEEE.


Hier steht was von "nvoglv32.dll" aber im Call-Stack taucht der name "ntdll.dll" auf.
Ich habe den allerneusten Treiber von NVIDIA, aber dieses Problem tritt erst seit ein paar Tagen auf, bzw. seit gestern glaube ich.

Kann das an einem Heap-Problem liegen, dass ich vlt. irgend wo anders Verursache, oder kann die "ntdll.dll" beschädigt worden sein?

Hoffe ihr könnt mir weiter helfen, ich suche schon den ganzen Abend nach einer Lösung. Hab auch extra Visual Studio 2012 installiert um den Code-Analyzer zu nutzen, aber der hilft mir da auch nicht weiter.

Danke schon mal,
Lukas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (26.11.2012, 10:00)


Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

24.11.2012, 03:30

0xFEEEFEEE? Mit diesem Wert überschreibt die Debugruntime Speicherbereiche die man freigibt. Sicher, dass du nicht etwas freigibts, was doch noch verwendet wird?
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

24.11.2012, 10:59

Sicher, dass du den Context nicht bereits vorher deleted hast? Verwendest du RAII für dein Contextmanagement, oder gibt es vielleicht eben einen Pfad in deinem Programm, der den Context mehrfach zu deleten versucht, der eben aber nicht immer genommen wird!?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

24.11.2012, 18:12

Also der Kontext wird definitiv nur einmal gelöscht. "wglDeleteContext" steht nur an zwei Stellen in meinem ganzen Projekt (einmal für den Basis Kontext und einmal für die Shared-RenderContexts) aber es wird nur einmal aufgerufen und stürtzt immer da ab.
Bzw. wenn es abstürtzt. Manchmal stürtzt es nicht ab und jetzt kahm der Fehler auf einmal aus "nvoglv32.dll":

Quellcode

1
Unhandled exception at 0x56D37410 (nvoglv32.dll) in TutorialGettingStarted.exe: 0xC0000005: Access violation reading location 0xC08318E0.


Falls ihr euch wundert warum auf einmal eine andere Anwendung da steht: der Fehler entsteht in meiner Engine, und ich habe eben mehrere Test Anwendungen btz. Tutorials in meiner Projektmappe.
Aber ich glaube kaum, dass der Fehler im max. 100 Zeiklen Programm "TutorialGettingStarted" verursacht wird.

Ich habe die befürchtung, dass der Heap irgendwo in meinem Programm ruiniert wird, was leider der Debugger nicht erkennt :(
Das Auftreten der Fehler scheint mir nämlich etwas willkürlich. Manchmal in "nvoglv32.dll", manchmal in "ntdll.dll".

EDIT:
Kann ich vlt. irgendwie mit Visual Studio 2012 noch mehr Debug-Informationen generieren, um Access Violations besser aufspüren zu können?
Ich find's ziehmlich mies, dass der Visual Debugger nicht mal Null-Pointer Exceptions entdeckt :(
Also Dereferenzierungen eines Null-Pointers muss ich im allgemeinen auch selbst finden. Der Visual Debugger erkennt das nicht. Ist das wirklich so ein Problem?! :huh:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (24.11.2012, 20:11)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

26.11.2012, 10:08

Ich komme mit meinem Problem leider nicht gut voran :(

Ich habe den Löschvorgang meiner Resources (VBOs, Texturen etc.) noch mal etwas anders angeordnet und das scheint jetzt zu funktionieren.
Komischer weise hat das aber alle die Jahre gut funktioniert.

Trotzdem schmiert meine Anwendung immer noch permanent ab, aber nicht immer an der selben Stelle. Jedoch hat es immer etwas mit den DLLs des Grafiktreibers oder des Betriebssystems zu tun (Win7 64 bit).
Nämlich in den DLLs: ntdll.dll, nvoglv32.dll und vrfcore.dll. In "vrfcore.dll" ist stürtzt es neuerdings wegen "glGetIntegerv" ab ?(

Ich habe sogar schon meinen Treiber aktuallisiert, in der Hofnung, dass mölicher Weise beschädigte DLLs überschrieben werden.
Bringt aber nix. Ich hatte vorher den aktuellsten NVIDIA Treiber "306.97 WHQL" und habe jetzt den neusten BETA Treiber "310.61 BETA" installiert.
Hilft alles nix. Auf meinem Laptop mit ATI Karte habe ich ab ähnliche Probleme seit kurzem, also kann es wohl nicht an beschädigten DLLs liegen.
Hat irgend wer noch ne Ahnung, wie ich das gescheit Debuggen kann? Ich würde gerne Visual Studio 2012 noch mehr Debug Informationen erzeugen lassen, weiß aber nicht ob und wie das geht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

26.11.2012, 10:13

Der Visual Debugger erkennt das nicht. Ist das wirklich so ein Problem?! :huh:

Ja, weil er sonst jeden lesenden Zugriff durch Register-Adressierung prüfen müsste, was quasi alle paar Befehle passiert. Es sieht allerdings nicht nach einem Null-Pointre aus, sondern danach, dass Du Pointer verwendest und Ressourcen adressierst, welche gelöscht wurden.

Falls Du eine Versionierungssoftware verwendest, mach Gebrauch davon und prüfe, welche Revisions zu dem Problem geführt haben.
Falls Du keine verwendest: Warum nicht?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

26.11.2012, 10:21

Doch, ich verwende SVN und hab mitlerweile 90 Revisionen. Da sollte auf jeden Fall eine funktionierende Dabei sein.
Nur ist das sehr Zeitaufwändig alles durch zu kompilieren um zu gucken wo es noch funktioniert hat, deshalb wollte ich erst mal nach anderen Lösungen schauen.
Aber es bleibt mir wohl nichts anderes Übrig.
Mein Arbeitskollege meinte, er kennt so ein Problem von Threading. Aber meines Wissens verwende ich in den Tests und Tutorials überhaupt keine Threads.
Nur CriticalSections, für den Fall, dass Threads eingesetzt werden.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

26.11.2012, 10:22

Na ja, mit SVN findest du es mit Garantie schneller als wenn wir in's blaue raten. Die Vermutung ist ja immer die selbe, nämlich dass Du etwas löschst und darauf zugreifst. Aber die Zeile und Klasse wirst Du so ohnehin nicht anders in Erfahrung bringen, als wenn Du die Revisionen durch testest und Dich ran tastest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

26.11.2012, 10:43

Abgesehen davon, würde ich dir raten, RAII zu verwenden. Ich vermute, dass du das im Moment nicht tust!? Dann werden solche Bugs nämlich von vornherein schon unterbunden...

0xFEEEFEEE ist jedenfalls wie bereits gesagt in starker Indikator dafür, dass du auf etwas zugreifst, das bereits gelöscht wurde...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

27.11.2012, 11:54

Ich habe jetzt mal drei ältere Revisions ausgecheckt, und das Problem tritt immer noch auf. Ich habe den Verdacht, dass meine Cg DLLs beschädigt sind.
Ich werde diese heute Abend mal aktuallisieren.
Allerdings wüsste ich nicht, warum das passiert sein sollte.

Jedoch hat zu den Revisions (54, 67 und 82 - die aktuellste ist 92) noch alles funktioniert.
Was das mit dem "wglDeleteContext" zu tun hat, verstehe ich allerdings auch nicht, somal ich in dem GettingStartet Tutorial - bei dem das Program eben an wglDeleteContext abgeschmiert ist - nicht von Cg gebrauch macht.
Dieses Problem habe ich behoben, durch eine bessere Reihenfolge aller Resource-Releases.

Jetzt stürtzt nur noch der DeferredRenderer Test ab, bei dem ich eben einen Cg Kontext erstelle, aber nicht zwangsläufig auf die Cg Shader zurückgreife.
Naja, das ist alles sehr komisch, einen derartigen Fehler hatte ich schon lange nicht mehr.
Wenn ich irgendwo RAII nicht beachtet habe, lies sich das bis jetzt immer deutlisch schneller lösen, und normaler Weise kann mir dabei auch der Visual Debugger mehr zur Hand gehen als jetzt.

Trotzdem danke für eure Hilfe, sollte ich das in absehbarer Zeit lösen könne, schreibe ich hier natürlich woran es lag.

Gruß,
Lukas

Werbeanzeige