Zufällige crashes in einem Nebenthread

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Zufällige crashes in einem Nebenthread

Beitrag von Andre »

Wir haben ein dickes Problem bekommen, und zwar ohne, dass ich als Programmierer viel dazu beigetragen habe. Die Engine an der wir basteln läuft nicht mehr rund auf dem PC des Artists (Raphael, auch hier im Forum), während sie auf meinem PC einfach nicht abstürzen will. Dabei passieren die Crashes auf seinem System immer nach zufälliger Zeit.

Ich hab gestern schon die komplette Source zu ihm rübergeschickt und per Teamviewer eine kleine Debug-Session gemacht. Raus kam viel komisches Zeug.
Das merkwürdigste ist, dass der Crash gar nicht an meinem Code liegen zu scheint, sondern in einem Nebenthread von Windows passiert.

Im Internet habe ich schon nach den Namen der betreffenden Funktionen gesucht und einige Seiten sagten mir, dass wohl gar ein anderer Prozess schuld sei! (http://blogs.msdn.com/b/ntdebugging/arc ... e-bad.aspx)
Aber wie soll man sowas debuggen?!

Angehängt ist ein Screenshot des Debuggers zur Zeit des Crashes. Ich bin mit meinem Latein auf jedenfall am Ende. Hat vielleicht von euch irgendjemand eine Ahnung wie man das beheben könnte?

System auf dem der Fehler auftritt: i7 920, Radeon 4890 neuester Treiber, Win7 Home
Dateianhänge
da234969064f8dcf83530d895a55f2ebfe59bc8e.jpg
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Zufällige crashes in einem Nebenthread

Beitrag von eXile »

Naja, RtlUserThreadStart im Callstack deutet erst einmal nur darauf hin, die Zugriffsverletzung tatsächlich in einem Nebenthread (und nicht im Hauptthread) auftritt. Im häufigsten Fall wurden die Threads vom User-Mode-Graphiktreiber erstellt; in diesem Falle schau erstmal, ob du nicht bei Benutzung der jeweiligen API doch irgendwelchen Unfug treibst. Insbesondere schau, wo der Hauptthread zum Zeitpunkt der Zugriffsverletzung steht, und ob dort irgendwelche graphikrelatierten Sachen sind, und dort auch alle Parameter an die Graphik-API in Ordnung sind.

Allerdings macht mich die Priorität von -3 für den Thread schon etwas stutzig; kann aber zum Zeitpunkt der Threadinitialisierung noch normal sein.
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Re: Zufällige crashes in einem Nebenthread

Beitrag von Andre »

Tatsächlich ist bei den 2 Malen wo wir die Crashes abfangen konnten jedes Mal der andere Thread gerade bei Direct2D-Operationen gewesen. Hier bei "EndDraw()" vom Rendertarget.

Allerdings habe ich es gestern schon geschafft mich durch die komplette Funktion im Hauptthread durchzubringen indem ich abwechselnd die Crashmeldung weggeklickt und F10 gedrückt habe. Irgendwann ging es allerdings auch so nicht mehr weiter.

Wie sähe denn so ein Unfug, den ich betreiben könnte aus? Und wieso äußert der sich nur auf seinem PC? (Auf seinem Laptop, Radeon 5650 mittelalter Treiber scheint es zu laufen) Und wieso erst jetzt?

Hier ist übrigens die genaue Location vom Crash im Hauptthread (Leider ohne Symbole, und mir viel auch gerade der Schwachsinn mit bWindowMinimized auf. Meh.):
Dateianhänge
663886d4ee459e1c9cdc164c2788d3c215afddee.jpg
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Zufällige crashes in einem Nebenthread

Beitrag von kimmi »

Hast du die Windows-Debugsymbole bereits installiert. Dann siehst du zumindest die Funktionen, die knallen. Und such mal nach WinDbg als Debugger. Dazu kannst du dir unter Windows einstellen, dass er einen Crashdump schreibt, den öggnest du dann mit WinDbg und anaylsierst das Ganze ( mit korrekt eingestellten Symbolen ), was scheif geht. So siehst du nur unvollständige Info's, die wahrscheinlich nicht einmal ganz richtig sind.

Einige hilfreiche Links dazu:
http://forums.plexapp.com/index.php/top ... n-windows/
http://stackoverflow.com/questions/7342 ... pplication

Gruß Kimmi
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Re: Zufällige crashes in einem Nebenthread

Beitrag von Andre »

Die Symbole müsste ich auf meinem Rechner haben. Sonst kann ich sie ja auch schnell nachladen. Dass man WinDbg auch für soetwas benutzen kann wusste ich noch gar nicht. ;) Ich hab es nur benutzt mir die Bluescreens wegen meinem kaputten RAM erklären zu können.
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Re: Zufällige crashes in einem Nebenthread

Beitrag von Andre »

Hier ist übrigens noch ein Shot aus VS, bei dem überhaupt keine D2D-Funktionen in diesem Frame aufgerufen wurden.
Dateianhänge
2.jpg
Benutzeravatar
Raphael
Beiträge: 65
Registriert: 22.12.2011, 13:39
Echter Name: Raphael Menges

Re: Zufällige crashes in einem Nebenthread

Beitrag von Raphael »

Habe [w]tech jetzt wieder fast eine Stunde auf dem Laptop laufen gelassen, keinerlei Problem. Könnte es eventuell an meinem Desktop liegen? An sich läuft da alles sehr stabil, nahezu nie Abstürze. Aber [w]tech ist soweit das anforderungsstärkste Programm was ich laufen lasse in Bezug auf DirectX. Die Crashes treten immer innerhalb von 20-25min auf.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Zufällige crashes in einem Nebenthread

Beitrag von CodingCat »

Übrigens gibt es auf Windows x64 offenbar einige Probleme beim Debuggen von Crashes, folgender Artikel kam gerade via Twitter rein: When even crashing doesn't work. Vielleicht hilft es.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Zufällige crashes in einem Nebenthread

Beitrag von Krishty »

So wie ich das sehe, setzt das aber voraus, dass man einen 32-Bit-Prozess auf einer AVX-kompatiblen CPU ausführt. Die Kombination ist so dämlich, dass sie mir wohl auch durch die Qualitätssicherung geflutscht wäre.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Re: Zufällige crashes in einem Nebenthread

Beitrag von Andre »

Nun, da ich gerade lese, dass AVX das erste mal von Intel 2011 verbaut wurde, denke ich nicht, dass das zutrifft.

Wir hatten aber eben gerade einen sehr sehr interessanten, aber auch verdammt merkwürdigen Fall. Da wir im Hauptthread immer um irgendwelche Direct2D-Funktionen herrum waren, als es crashte, habe ich Raphael mal gebeten einfach das InEditor-Game zu starten. Das ist einfach eine Version des Spielmodis der Engine, welche man direkt aus dem Editor raus starten kann. Es wird allerdings, anders als beim Editor, keine einzige D2D-Funktion benutzt.

Nun funktioniert das ganze wie folgt: Startet man die Engine mit einem passenden Parameter, so wird dieses PlayInEditor-Game (PIE-Game) gestartet.
Es wird also im Editor eine Map gespeichert, dann via CreateProcess() ein neuer Prozess der Engine erstellt (Selbe .exe wie der Editor!), nur eben mit den passenden Argumenten.

Dann, und jetzt kommts, wir per WaitForSingleObject() im Editor gewartet bis das PIE-Game beendet wurde (Wird später noch ersetzt, Windows denkt nämlich der Editor würde hängen).

Das PIE-Game wurde also gestartet und dann hieß es warten. Und es stürzte nach einiger zeit auch etwas ab! Aber nicht das PIE-Game. Der Editor! Während er noch in WaitForSingleObject() steckte!

Ich glaube jetzt verstehe ich absolut nur noch Bahnhof :(
Antworten