Als ich den Befehl clrstack ausgegeben habe, habe ich folgende Ausgabe erhalten. Es ist der Callstack eines blockierenden Threads, der einen Deadlock besitzt und zu einem Deadlock führt. Ist das der genaue Zweck? Hat es andere Zwecke (ohne irgendwelche Parameter). Wo kann ich mehr Informationen bekommen?
%Vor%Gewusst wie: Deadlocks debuggen Windbg verwenden?
CLRStack [-a] [-l] [-p] [-n] Bietet Nur eine Stapelverfolgung von verwaltetem Code.
Die Option -p zeigt Argumente an verwaltete Funktion.
Die Option -l zeigt Informationen zu lokale Variablen in einem Rahmen. Das SOS Debugging-Erweiterung kann nicht abgerufen werden lokale Namen, also die Ausgabe für local Namen sind im Format =.
Die Option -a (all) ist eine Abkürzung für -l und -combined.
Die Option -n deaktiviert die Anzeige von Quelldateinamen und Zeilennummern. Ob Der Debugger hat die Option SYMOPT_LOAD_LINES angegeben, SOS wird Nachschlagen der Symbole für jeden verwalteten Frame und wenn erfolgreich angezeigt wird der entsprechende Quelldateiname und Zeilennummer. Die -n (Keine Zeilennummern) Parameter kann zum Deaktivieren angegeben werden Dieses Verhalten.
Die SOS-Debugging-Erweiterung funktioniert nicht Übergangsrahmen auf x64 und IA-64-basierte Plattformen.
Aktualisieren : (Danke an @Liran): Um die Aufruf-Stacks für alle Threads in Ihrer Anwendung anzuzeigen, führen Sie den folgenden Befehl aus:
%Vor%(was im Grunde bedeutet, "iteriere über alle Threads und führe den Befehl '! clrstack' auf jedem von ihnen aus").
Sosex von Steve Johnson. Dies hat einen Befehl, Deadlocks für Sie zu erkennen.
Laden Sie die Erweiterung vom Link herunter und laden Sie sie, zB
%Vor%dann Problem
%Vor%Beispielausgabe (von der Website von Steve)
0: 010 & gt; ! dlk Deadlock erkannt: CLR-Thread 4 enthält Sync-Block 00000000024c6970 OBJ: 000000007fff0f80 [System.String] STRVAL = SYNC1 wartet Sync-Block 00000000024c6928 OBJ: 000000007fff0fa8 [System.String] STRVAL = SYNC2 CLR-Thread 5 hält Synchronisierungsblock 00000000024c6928 OBJ: 000000007fff0fa8 [System.String] STRVAL = SYNC2 wartet Sync-Block 00000000024c6970 OBJ: 000000007fff0f80 [System.String] STRVAL = SYNC1 CLR Thread 4 ist Warten auf ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc () + 0xa4 (IL) [C: \ dev \ ConsoleTestApp \ ConsoleTestApp.cs, Zeile 195] CLR Thread 5 ist Warten auf ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc () + 0xa4 (IL) [C: \ dev \ ConsoleTestApp \ ConsoleTestApp.cs, Zeile 195]
Siehe auch diesen Link für eine Komplettlösung