Debugging ein Deadlock mit Windbg ist !clrstack-Befehl
Wenn ich ausgestellt clrstack-Befehl, habe ich die folgende Ausgabe. Es ist der callstack, der eine blockierende Threads besitzt, einen deadlock und die Ergebnisse in einem deadlock. Ist, dass seine genaue Zweck? Gibt es irgendwelche anderen Zwecke (ohne Parameter). Wo kann ich weitere Informationen erhalten?
!clrstack
OS Thread Id: 0x1b2c (6956)
ESP EIP
0012f370 7c90e514 [HelperMethodFrame: 0012f370] System.Threading.Thread.SleepInternal(Int32)
0012f3c4 79299275 System.Threading.Thread.Sleep(Int32)
0012f3c8 00e0030f testlock.LockTest.Test()
0012f420 00e00146 testlock.Program.Main(System.String[])
0012f69c 79e71b4c [GCFrame: 0012f69c]
- Wie unten beantwortet, wird mit diesem Befehl wird einfach verwendet, um anzuzeigen, verwaltete Aufrufliste für den aktuellen thread-Kontext. Also, wenn Sie debugging-deadlock-Probleme, sollten Sie versuchen, kombinieren Sie es mit anderen Befehlen.
- Das sieht nicht aus wie eine Sackgasse für mich. Der Stapel zeigt einen Anruf, um zu Schlafen. Für einen deadlock, sollten Sie erwarten, um zu sehen, ein Wait-Aufruf auf den stack.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gewusst wie: Debuggen von Deadlocks Mit Windbg?
WinDbg - /SOS-Spickzettel
Update: (Dank an @Liran): die call-stacks für alle threads in Ihrer Anwendung, führen Sie den folgenden Befehl ein:
(was im Grunde bedeutet, "Iteration über alle threads, und führen Sie den Befehl '!clrstack " auf jeden von Ihnen).
~*e!clrstack
(was im Grunde bedeutet, "Iteration über alle threads, und führen Sie den Befehl '!clrstack " auf jeden von Ihnen).Verwenden sosex von Steve Johnson. Dies hat einen Befehl zum erkennen von deadlocks für Sie.
Laden Sie die Erweiterung aus dem link und laden Sie es, z.B.
dann Frage
Beispiel für die Ausgabe (aus steve ' s Website)
Siehe auch diese link eine Exemplarische
Tess hat gebloggt viele nützliche Informationen über windbg. Hier ist eine post, die helfen könnten.