Debuggen eines Deadlocks mit Windbgs! clrstack-Befehl

7

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%     
Maanu 21.08.2010, 05:26
quelle

3 Antworten

15

Gewusst wie: Deadlocks debuggen Windbg verwenden?

WinDbg / SOS-Spickzettel

  

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").

    
Mitch Wheat 21.08.2010, 05:42
quelle
20

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

    
wal 31.08.2010 14:41
quelle
1

Tess hat viele nützliche Informationen über windbg gebloggt. Hier ist ein Beitrag das könnte helfen.

    
Russel Yang 21.08.2010 06:02
quelle

Tags und Links