Welche Schritte und Techniken gibt es, um einen offensichtlichen Stillstand aufgrund eines Deadlocks in einem Win32-Produktionsprozess zu beheben? Ich habe gehört, dass WinDbg für diesen Zweck verwendet werden kann, aber könnten Sie bitte klare Hinweise geben, wie dies erreicht werden kann?
Antworten
Zu viele Anzeigen?Diese Beitrag sollte Ihnen den Einstieg in die verschiedenen Optionen erleichtern Lesen Sie die Beiträge mit dem Stichwort Debugging
Ein weiterer nützlicher Artikel über Fehlersuche bei Deadlocks ..
Das Debuggen eines echten Deadlocks ist eigentlich recht einfach, wenn man Zugriff auf den Quellcode und einen Speicherabzug (oder eine Live-Debugging-Sitzung) hat.
Sie brauchen sich nur die Threads anzusehen und diejenigen zu finden, die auf eine gemeinsam genutzte Ressource warten (z. B. aufgehängt in WaitForSingleObject
). Im Allgemeinen muss man von dort aus herausfinden, welche zwei oder mehr Threads sich gegenseitig gesperrt haben, und dann muss man nur noch herausfinden, welcher Thread die Sperrhierarchie durchbrochen hat.
Wenn Sie nicht leicht herausfinden können, welche Threads gesperrt sind, verwenden Sie die in dieser Beitrag hier um die Verriegelungskette für jeden Faden zu verfolgen. Wenn Sie in eine Schleife geraten, sind die Threads in der Schleife diejenigen, die blockiert sind.
- See previous answers
- Weitere Antworten anzeigen