2016-07-12 2 views
0

私のexe-onceテストプログラムはCancelIoを呼び出してブロックしますが、どのブロックがブロックしているのかを調べたいので、ブロックするとwindbgを使用してリモートからマシンに侵入し、見つけようとします。windbgカーネルデバッガからユーザスレッドコールスタックを調べるには?

イメージに黄色でマークされているように、私のEXEにはfffffa8013958b60fffffa8013aa1060という2つのスレッドがあります。私はすでにfffffa8013aa1060CancelIoを呼び出していることを知っています。

次に、スレッドの現在の呼び出しスタックを表示するにはどうすればいいですか?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

あなたがそのスレッドに切り替えS' ~~ '[0724]を試すことができ、あなたは、コールスタック – EdChum

+0

を表示するには、通常どおり' kb'を行うことができます@EdChum WinDbgのヘルプは、「カーネルモードでは、あなたがコントロールすることはできませんと言いますスレッド識別子を使用してスレッドを作成します。 –

答えて

3

WinDbgのドキュメントから

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

抜粋このコマンドシーケンスを試してみてください。

/I [...]プロセスがにあることを指定します侵略的にデバッグする。この種のデバッグは、ターゲットコンピュータのオペレーティングシステムが実際に指定されたプロセスをアクティブにすることを意味します。 [...]/iを使用する場合は、g(Go)コマンドを使用してターゲットを実行する必要があります。数秒後、ターゲットはデバッガに戻り、指定されたプロセスがアクティブになり、プロセスコンテキストに使用されます。

+0

これはライブデバッグでのみ機能します。死後のクラッシュダンプからその情報を得るチャンス? '/ p/r'はそうするかもしれない –

関連する問題