2016-07-12 8 views
0

Mein exe-einmal Testprogramm ruft CancelIo auf und es blockiert, ich möchte untersuchen, in welcher Funktion es blockiert, also, wenn es blockiert, benutze ich windbg, um in die Maschine zu brechen, entfernt, und versuchen, es herauszufinden .Wie untersucht man Benutzer Thread Aufrufstack von Windbg Kernel Debugger?

Wie im Bild gelb markiert, hat meine EXE zwei Threads, fffffa8013958b60 und fffffa8013aa1060. Ich weiß bereits, dass fffffa8013aa1060 derjenige ist, der CancelIo aufruft.

Dann, wie zeige ich aktuelle Aufrufliste des Threads fffffa8013aa1060?

enter image description here

1: kd> !process fffffa8014c25170 2 
PROCESS fffffa8014c25170 
    SessionId: 1 Cid: 0ad4 Peb: 7fffffdf000 ParentCid: 07b8 
    DirBase: 2b451000 ObjectTable: fffff8a002e61620 HandleCount: 12. 
    Image: exe-once.exe 

     THREAD fffffa8013958b60 Cid 0ad4.0724 Teb: 000007fffffdd000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable 
      fffffa8013aa1060 Thread 

     THREAD fffffa8013aa1060 Cid 0ad4.01e8 Teb: 000007fffffdb000 Win32Thread: 0000000000000000 WAIT: (DelayExecution) KernelMode Non-Alertable 
      fffffa8013aa1420 Semaphore Limit 0x1 
+0

können Sie versuchen, '~~ [0724] s' zu diesem Thread zu wechseln, können Sie dann tun' kb' als normal den Call-Stack – EdChum

+0

@EdChum WinDbg help „im Kernel-Modus sagt angezeigt werden, können Sie nicht kontrollieren Threads mithilfe von Thread-IDs. " –

Antwort

3

versuchen, diese Befehlssequenz

.process /i fffffa8014c25170 
g 
.thread fffffa8013aa1060 
.reload /user 
k 

Auszug aus WinDbg Dokumentation:

/i [...] Gibt an, dass Verfahren zu invasiv debuggt werden. Diese Art der Fehlerbehebung bedeutet, dass das Betriebssystem des Zielcomputers den angegebenen Prozess tatsächlich aktiv macht. [...] Wenn Sie/i verwenden, müssen Sie den Befehl g (Go) ausführen, um das Ziel auszuführen. Nach einigen Sekunden bricht das Ziel wieder in den Debugger ein und der angegebene Prozess ist aktiv und wird für den Prozesskontext verwendet.

+0

Das funktioniert also nur im Live-Debugging. Eine Chance, diese Informationen aus einem Post-Mortem-Absturzspeicher zu bekommen? '/ p/r' könnte tun –

Verwandte Themen