重要ジュウヨウなWinDbgのコマンド   2010/07/18  
 
  自動ジドウ解析カイセキ (最初サイショ実行ジッコウするコマンド)  
  @ kd> !analyze -v stopエラー自動ジドウ解析カイセキ (メモリダンプのトキ  
  A kd> lmvm ドライバメイ ドライバのタイムスタンプ  
                ここまではツネ実施ジッシする  
  ■プロセスとスレッド  
  kd> !pcr   実行ジッコウスレッド(CurrentThread)、IdleThread、IDT、IRQL 表示ヒョウジ  
  kd> kb   現在のRUNNING thread のスタックを表示  
  kd> !process 0 全体ゼンタイのアプリ、プロセス、スレッドを調査チョウサ(Windows NT4.0)  
  kd> !stacks  全体ゼンタイのアプリ、プロセス、スレッドを調査チョウサ(Windows 2000以降イコウ  
  0: kd> !stacks   CPU0の全てのプロセスを出力。  【図1】参照  
  0: kd> ~1s   CPU1に変更ヘンコウ。  「1: kd> ~0s」はCPU0に変更ヘンコウ  
  1: kd> !stacks   CPU1の全てのプロセスを出力。  【1】参照サンショウ  
  kd> !process 実行ジッコウチュウのプロセスのみ。 「RUNNING」のあるプロセス。  
  kd> !process x  指定シテイプロセスの行列ギョウレツ調シラべる  (上p.350)インサイド書籍  
  kd> !thread   実行中のthreadのみ。 「RUNNING」のあるthread。  
  kd> !thread xxxx 指定シテイのthread  
    threadのスタックは7ビョウ以上イジョウでページアウトの可能性カノウセイり。  
  kd> !ethread xxxx Display ETHREAD structure  
  kd> !kthread xxxx Display KTHREAD structure  
  kd> !ready 1 レディ状態ジョウタイにあるスレッドを調シラべる(重要ジュウヨウではない) (ウエp.382)  
  kd> !Object xxxx !handleの部分表示 (重要ではない)  
  kd> !exqueue システム ワーカースレッド(重要ジュウヨウではない)  
  kd> !handle   ハンドル テーブル(重要ジュウヨウではない)  
  1】!stacksでの表示ヒョウジ  
      [アプリケーション1.exe]  
  process x thread READY  
  process x thread Blocked   OSはRUNNING  
  〜〜 〜〜 Blocked   できるthreadを  
      [アプリケーション2.exe]   順番ジュンバン実行ジッコウする。  
  process b thread Blocked  
  kbで表示ヒョウジするのは process b thread RUNNING  
  最後サイゴ実行ジッコウした 〜〜 〜〜 READY   Ticks: はヤク10mSec  
  threadのスタック     〜〜〜〜〜〜〜〜   のカウンタで直前チョクゼン  
  です       [アプリケーションn.exe]多数タスウあり 実行時間を示す。  
  process zz thread Blocked  
 
  ■ドライバ関連カンレン  
  kd> lm   ドライバ リスト  
  kd> lm kv   ドライバ の版数ハンスウ一覧イチラン  
  kd> lmvm ドライバメイ ドライバ の日付ヒヅケ  
  kd> !irpfind   IRP(I/O要求ヨウキュウパケット)行列ギョウレツ  
  kd> !idt   IRQ(割込ワリコミ要求ヨウキュウ)ベクタテーブル。IRQ処理ショリプログラムを確認カクニン  
  kd> !tirmer   DPC(遅延チエンフロシージャコール)のタイマ行列ギョウレツ  
    ドライバ→(a)→IRP→IRQ→DPC→(a)   データしまで  
         ↑←←←←←←←←←↓   I/O処理を続ける。  
  ■PCI関連カンレン  
  kd> !pci   PCIリスト (Bus, Device, Function) (カーネルデバッガのみ?)  
  kd> !pcitree PCI接続のデバイスをツリー表示 (2000以降イコウ  
  kd> !arbiter   システムリソース( I/O, メモリ, IRQ, DMA, )表示 (2000以降イコウ)  
  ■NMI と IRQ ベクタテーブル。  
  kd> .load kdex2x86 !idt などを有効にする (dllの関数カンスウシタギョウ表記ヒョウキり)  
  kd> !kdex2x86.idt 0 割込テーブル(IDT)の一覧イチラン表示ヒョウジ。(Windows NT/2000)  
  kd> !idt -a   割込テーブル(IDT)の一覧イチラン表示ヒョウジ。(Windows XP以降イコウ  
 
  ■メモリ管理カンリ    
  kd> !memusage ★memory usage 情報ジョウホウ  「Invalid PTE エラー」の調査チョウサ  
  kd> !vm   ★Virtual Memory Usage 情報ジョウホウ  
  kd> !sysptes  PTE調査  
  kd> !lookaside look-aside lists  
  kd> !poolused 2   pool  (2000以降イコウ)  
  kd> !poolused   pool  (Windows XP 用)  
  kd> !Kdex2x86.xpool -map   pool  (NT4.0)  
  kd> !xpoolmap NP pool  (XP)  
  kd> !spoolused NP pool  (XP)  
  ■CPU関連カンレン  
  kd> !cpuinfo   CPUのマイクロコードを確認カクニン  
  kd> !cpuid   コンピューターのCPUIDを表示  
  kd> !sysinfo cpuinfo CPU情報ジョウホウ  
  kd> !irql   IRQLを出力シュツリョク (IRQL=00〜1F が正解セイカイ。20以上イジョウ暴走ボウソウ。)  
  kd> r cr2   ページフォルトの発生ハッセイしたアドレス。 cr2はCPUレジスタ。  
 
  ■カーネルデバッガ関連カンレン  
  kd> (Break) 「Break」ボタンでプログラムをめる。  
  kd> .reload /f シンボルをサイロード(カーネルデバッガの途中トチュウ使用シヨウ  
  kd> g   プログラムをサイ実行ジッコウ  
  kd> eb [a] xx xx xx メモリアドレス[a]からデータ「xx xx xx」を  
  kd> .dump /m mini.dmp カーネルデバッガでミニダンプを取得シュトク  
  kd> ba e1 xxxx プログラムアドレスxxxxでハードブレーク。「e1」の1は固定コテイアタイ  
  kd> ba e1 xxxx "r;dd esp |4;g"  アドレスxxxxで「" "」の条件ジョウケンをトレース表示。  
  kd> ba r4 xxxx メモリアドレスxxxxの4バイトreadとwriteでハードブレーク。r4 = r1/r2/r4
  kd> ba w4 xxxx メモリアドレスxxxxの4バイトwriteでハードブレーク。w4 = w1/w2/w4  
  kd> bl   ブレークのリスト表示ヒョウジ  
  kd> bc x   指定シテイ番号バンゴウのブレークを削除サクジョ。(番号バンゴウは bl で確認カクニンする)  
  注意:「bp」はソフトブレーク。「ba」はハードブレークでこちらを使用の事。
  「ba」はDiskに退避タイヒしメモリに存在ソンザイしない場合バアイ使用シヨウ可能カノウ  
  ■その調査チョウサ  
  kd> s -d 80000000 L4000000 xxxxxxxx   L4000000はナガさで固定コテイ  
    アドレス80000000〜8fffffffでxxxxxxxx のデータ検索ケンサク  
  kd> !chkimg メモリ コラプション(陳腐化)(memory_corruption)の調査。  
  kd> !chkimg -lo 50 -d !nt  
  kd> !chkimg -lo 50 -d !win32k  
  kd> dd xxxx メモリのダブルワード表示ヒョウジ (WinDbgでは専用センヨウウィンドウり)  
  kd> u [a] [b] アドレス[a]から[b]までナガい(大量タイリョウ)のギャクアセンブルが可能カノウ  
  kd> x nt!Rlp* 指定シテイソフトのシンボルのリストの出力シュツリョク (参考サンコウ:「nt!」はOSをシメす)  
  kd> .trap xxxx-70 xxxxはトラップの先頭セントウでCPUフラグのあるアドレス。  
      CPUレジスタとトラップのプログラムを表示。  
      IRQ処理ショリではDS,ESは確認カクニンできない。NMIは表示ヒョウジ  
 
  ■コマンド一覧イチラン (WinDbgコマンドは3種類シュルイあり) (印刷インサツ手元テモトく)  
  kd> ?   (1) 通常コマンド    (一覧イチラン) 「」:コマンドの頭 資料シリョウ印刷インサツ  
  kd> .help   (2) メタコマンド     (一覧イチラン) 「.」:コマンドの頭 資料シリョウ印刷インサツ  
  kd> .chain   (3) 拡張コマンド  
  [path: C:\Program Files\Debugging Tools for Windows\winext\ext.dll] など。  
  kd> !ext.help (3) 拡張コマンド  (一覧イチラン 「!」:コマンドの頭 資料シリョウ印刷インサツ  
  kd> .hh [command]  コマンドの詳細ショウサイ説明セツメイ  
  不明フメイなコマンドは「WinDbg」→「help」→「Contents」で検索ケンサクする。
 
参考サンコウ  
  Ticks:  ヤク10mSec * n のカウンタで相対ソウタイテキ実行ジッコウ時間ジカンシメす。  
  TicksはRUNNINGのthreadでは実行ジッコウケンったトキからの時間ジカンで、異常イジョウ  
  TicksがオオきいトキはIRQLがタカ状態ジョウタイでループしているコトシメす。  
  アプリのようにIRQL=0であれば自動ジドウテキのthreadに実行ジッコウケン移動イドウする。  
 
  カクthreadのそのマエ実行ジッコウしたスレッドをメモリダンプよりることはできない。  
  「!stacks」コマンドでもカクthreadのTicksを表示ヒョウジさせることができ、Ticks=0 で  
  あれば直前に実行ジッコウしたことが推定スイテイできる。  
 
  kb:   デフォルトで20ギョウまでのスタックトレースを表示ヒョウジ  
  「.kframes xx」コマンドでこの20ギョウ(default count)を変更ヘンコウできる。  
  IRQマタはNMIが発生ハッセイしたトキにトラップが発生ハッセイするが、「.trap xxxx」コマンドで  
  そのトキのCPUレジスタの内容ナイヨウることができる。「.trap xxxx」コマンド後の  
  「kb」コマンドはそのトラップの直前チョクゼンのスタックトレースにわる。  
 
  Homeにモド   以上イジョウ