2009-04-01 5 views
2

Das Programm, an dem ich gerade arbeite, hängt gelegentlich mit einem AppHangB1-Problemereignis. Ich habe es auf eine bestimmte Reihe von Handlungen zurückgeführt, aber es scheint eine Art Heisenbug zu sein, denn wenn ich den Code durchtrete, zeigt er sich nicht. Und sobald das Programm hängt, kann ich das Programm nicht anhalten, um zu sehen, wo es in Visual Studio hängt. Es gibt viele Dinge in dieser Anwendung (Unmanaged Interop, Multi-Threading, etc.), so dass es eine Reihe von Dingen sein kann, die in meiner speziellen Anwendung falsch sind.Was kann dazu führen, dass eine WPF-Anwendung mit einem AppHangB1-Problem-Ereignisnamen abstürzt?

Ich bin nicht auf der Suche nach jemandem, um mein Problem für mich zu lösen, ich frage mich nur, welche Arten von Dingen könnte diese Art von Hang verursachen? Ich habe ein paar Hits bei Google gefunden, aber nichts, was geholfen hat. Alle Debugging-Tricks für .NET-Anwendungen, die helfen könnten, das Problem zu lokalisieren, würden ebenfalls hilfreich sein.

Antwort

6

Das AppHangB1-Ereignis wird ausgelöst, wenn der UI-Thread für einige Sekunden nicht auf Nachrichten reagiert und der Benutzer versucht, ihn zu beenden. Hänge können durch fast alles verursacht werden: ausgelastete Schleifen in Ihrem Code, Netzwerk- oder Festplatten-I/O auf dem Benutzeroberflächenthread, der Benutzeroberflächen-Thread wird auf einer Sperre durch einen Hintergrund-Thread blockiert, der eine lange laufende Aufgabe ausführt, usw.

Es ist ein bisschen daran, dass Visual Studio nicht an dem Punkt des Aufhängens brechen kann. Anfügen für Debug-Debuggen oder Debugging im gemischten Modus? Sie könnten versuchen, Windbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx) zu verwenden, um nicht-invasiv an den Prozess anzuhängen und versuchen, eine Stack-Ablaufverfolgung des aufgehängten Threads zu erhalten (Sie möchten mit clrstack die verwaltete Stack-Trace abrufen). Die Lernkurve für Windbg ist ziemlich steil, also möchten Sie vielleicht nur einen Dump sammeln, den Sie in Visual Studio debuggen können.

+0

Meine Debugging-Fähigkeiten reichen nicht weit über die VS2008-Tools hinaus. Ich habe WinDbg in der Vergangenheit verwendet, bin aber nicht sehr vertraut damit. Ich kann keine Spur (in VS oder WinDbg) abrufen, wenn die App nicht reagiert. Beide Debug-Apps hängen, wenn meine App hängt. Irgendwelche Vorschläge, wie man eine Spur bekommt? – bsruth

+0

Probieren Sie das Remote-Debugging aus. Wenn Ihre App sehr merkwürdig ist und den Desktop anspricht, kann es hilfreich sein, ein Remote-Debugging durchzuführen, da die Benutzeroberfläche von Ihrer App nicht blockiert werden kann. – Michael

Verwandte Themen