Windows
debug

Windowsのトラブルシューティング用の63のツール「Sysinternal Suite」

More than 3 years have passed since last update.

Sysinternals Suite

Sysinternals SuiteはWindowsのトラブルシューティングを行うツールをまとめたもので下記からダウンロードできる。

http://technet.microsoft.com/ja-jp/sysinternals/bb842062.aspx

以下のツールが含まれる。

名前 説明
AccessChk ファイル、ディレクトリ、レジストリ キー、グローバル オブジェクト、Windows サービスなどのリソースに対して持つアクセス権を調べるためのコマンドラインツール
http://technet.microsoft.com/ja-jp/sysinternals/bb664922
AccessEnum ファイル、ディレクトリ、レジスターのアクセス権の一覧をGUIに表示する。
http://technet.microsoft.com/ja-jp/sysinternals/bb897332
AdExplorer Active Directory (AD) のビューアーおよびエディター。未検証。
http://technet.microsoft.com/ja-jp/sysinternals/bb963907
AdRestore 削除された Active Directory オブジェクトを復元するツール。未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb963906
Autologon 指定のユーザで再起動時に自動ログオンするようにできる。
http://technet.microsoft.com/ja-jp/sysinternals/bb963905
Autoruns Windowsの起動時に自動実行するプログラムの一覧を表示する。autorunsc.exeはCUIベースで、autoruns.exeはGUIになっている。
http://technet.microsoft.com/ja-jp/sysinternals/bb963902
BgInfo BgInfoは壁紙にCPUやIPなどの情報を表示する。壁紙に書き込むので無駄なプロセスは使用されない
http://technet.microsoft.com/ja-jp/sysinternals/bb897557
CacheSet システム ファイル キャッシュのワーキング セットのサイズを設定できるアプレット.未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb897561
ClockRes システム クロックの精度やアプリケーションが取得できる最大タイマー精度をコンソールで表示する。
http://technet.microsoft.com/ja-jp/sysinternals/bb897568
Contig ディスク上でファイルが連続した状態になるように、単一のファイルを最適化するコマンドラインのツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897428
Coreinfo 論理プロセッサと物理プロセッサの間のマッピング、NUMA ノードと NUMA ノードが存在するソケット間のマッピング、および各論理プロセッサに割り当てられたキャッシュを確認できるコマンド ラインユーティリティ
http://technet.microsoft.com/ja-jp/sysinternals/cc835722
Ctrl2cap CapsLock キーで入力する文字を Ctrl キーの文字に変換する.未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb897578
DebugView DebugView は、ローカル システム、または TCP/IP 経由でアクセスできるネットワーク上の任意のコンピュータにおける、デバッグの出力を監視できるアプリケーション
http://technet.microsoft.com/ja-jp/sysinternals/bb896647
Desktops 最大4つの仮想ディスクトップを切り替えて使用できるようになる。
http://technet.microsoft.com/ja-jp/sysinternals/cc817881
Disk2vhd VirtualPCで使用する物理ディスクのVHDを作成する。コマンドラインから使用できる。未検証。
http://technet.microsoft.com/ja-jp/sysinternals/ee656415
DiskExt ボリュームのパーティションがどのディスク上にあるか、パーティションがディスク上のどこにあるかをコマンドラインで返す。管理者権限が必要。
http://technet.microsoft.com/ja-jp/sysinternals/bb896648
DiskMon ハード ディスクのすべての動作状況をログに記録したり表示したりするアプリケーション。要管理者権限
http://technet.microsoft.com/ja-jp/sysinternals/bb896646
DiskView ディスクのグラフィカルなマップを表示することができ、ファイルの位置を特定したり、クラスターをクリックして、そのクラスターを占有しているファイルを確認したりできる。
http://technet.microsoft.com/ja-jp/sysinternals/bb896650
Disk Usage (DU) 指定したディレクトリのディスク領域の使用量をレポートするコマンドラインツール。
http://technet.microsoft.com/ja-jp/sysinternals/bb896651
EFSDump 暗号化されたファイルにアクセスする権限があるアカウントを表示するコマンドラインツール。未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb896735
FindLinks 指定されたファイルのために存在するファイルインデックスと任意のハードリンクをレポートするコマンドラインツール
http://technet.microsoft.com/en-us/sysinternals/hh290814
Handle システムのプロセスで開かれているハンドルに関する情報を表示するユーティリティ。
http://technet.microsoft.com/ja-jp/sysinternals/bb896655
Hex2dec 10進数、16進数の相互変換を行うコマンドラインツール
http://technet.microsoft.com/ja-jp/sysinternals/bb896736
LDMDump LDMデータベースに格納されているデータを詳しく調査できるユーティリティ.未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb897413
ListDLLs Windows 9x か Windows NT に読み込まれる DLLのリストを取得するコマンドラインツール
http://technet.microsoft.com/ja-jp/sysinternals/bb896656
LiveKd マイクロソフト カーネル デバッガーの Kd と Windbg を、運用システムでローカルに実行することができる。未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb897415
LoadOrder デバイス ドライバーが読み込まれる順序を表示する。
http://technet.microsoft.com/ja-jp/sysinternals/bb897416
PendMovesとMoveFile サービスパックや修正プログラムのように再起動後に移動や削除をおこなうためのMoveFileコマンドと、現在ペンディング中のファイルを表示するPendMovesコマンド
http://technet.microsoft.com/ja-jp/sysinternals/bb897556
NTFSInfo NTFS ボリュームに関する情報を表示するコマンドラインツール。
http://technet.microsoft.com/ja-jp/sysinternals/bb897424
PageDefrag ページング ファイルとレジストリ ハイブの断片化の確認と最適化を行うらしいが、Windows7 64bitでは動作しない。
http://technet.microsoft.com/ja-jp/sysinternals/bb897426
PipeList パイプのディレクトリ一覧を取得するコマンドラインツール
http://technet.microsoft.com/ja-jp/sysinternals/dd581625
PortMon システムのシリアル ポートとパラレル ポートで行われている活動を監視および表示するユーティリティ。未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb896644
ProcDump 条件を指定して、プロセスのダンプを行う。
http://technet.microsoft.com/ja-jp/sysinternals/dd996900
Process Explorer 実行中のプログラムの状態を調べるツール。呼び出し元の親プロセスとの関係をツリーで表現している。
http://technet.microsoft.com/ja-jp/sysinternals/bb896653
Process Monitor プロセスが行った処理(ファイル、レジストリ、プロセス・スレッドの活動)をリアルタイムに表示するツールである。
http://technet.microsoft.com/ja-jp/sysinternals/bb896645
PsExec PsExec は Telnet に代わる軽量のユーティリティで、クライアント ソフトウェアを手動でインストールしなくても、他のシステムでプロセスを実行できるだけでなく、コンソール アプリケーションとの十分な対話性も備わっている。しかしVista以降ではUACをOFFにしないと使用できない。
http://technet.microsoft.com/ja-jp/sysinternals/bb897553
PsFile リモートからアクセスしているファイルやフォルダーの一覧を表示したり、アクセスを終了させるツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897552
PsGetSid SIDの確認ができる。
http://technet.microsoft.com/ja-jp/sysinternals/bb897417
PsInfo ローカルまたはリモートの Windows NT/2000 システムに関する重要な情報を収集するコマンド ライン ツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897550
PsKill ローカルまたはリモートのプロセスを強制終了するツール
http://technet.microsoft.com/ja-jp/sysinternals/bb896683
PsList ローカルまたはリモートのプロセスの一覧を表示する。
http://technet.microsoft.com/ja-jp/sysinternals/bb8966802
PsLogList リモート システムにログインして、イベントログのメッセージ文字列を取得できる
http://technet.microsoft.com/ja-jp/sysinternals/bb897544
PsPasswd ローカル システムまたはリモート システムのアカウントのパスワードを変更できるツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897543
PsService ローカルまたはリモートのサービスのビューアー兼コントローラー
http://technet.microsoft.com/ja-jp/sysinternals/bb897542
PsShutdowon ローカルまたはリモートをシャットダウンする。
http://technet.microsoft.com/ja-jp/sysinternals/bb897541
PsSuspend ローカル システムまたはリモート システムのプロセスを中断できる。終了ではなく中断なので、後から-rオプションを利用することでプロセスを再開できる。
http://technet.microsoft.com/ja-jp/sysinternals/bb897540
RAMMap 物理メモリの使用状況を詳細に分析できるGUIツール
http://technet.microsoft.com/ja-jp/sysinternals/ff700229
RegDelNull 埋め込まれた null 文字が含まれており、標準のレジストリ編集ツールでは削除できないレジストリ キーを検出して削除できます
http://technet.microsoft.com/ja-jp/sysinternals/bb897448
RegJump ジストリのパスを受け取って、指定のパスが表示された状態で Regedit を開く。
http://technet.microsoft.com/ja-jp/sysinternals/bb963880
RootkitRevealer ルートキット検出ユーティリティ.未検証。Windows XP(32ビット)およびWindows Server2003(32ビット)では動作するらしいがWin7 64bitでは動作
http://technet.microsoft.com/ja-jp/sysinternals/bb897445
SDelete Secure Delete.ディスク上にある、削除されたファイルのデータを上書きすることで、ファイルの復元を防ぐ。
http://technet.microsoft.com/ja-jp/sysinternals/bb897443
ShareEnum でアクセス可能なドメイン内のすべてのコンピューターがスキャンされ、ファイル共有や印刷共有、およびそのセキュリティ設定が表示される.
http://technet.microsoft.com/ja-jp/sysinternals/bb897442
ShellRunas プログラムを別のアカウントで起動する
http://technet.microsoft.com/ja-jp/sysinternals/cc300361.aspx
Sigcheck 画像がデジタル署名されているかどうかを確認して、バージョン情報をダンプする。未検証。PDFの署名は検出しない。
http://technet.microsoft.com/ja-jp/sysinternals/bb897441
Streams 関連付けられたストリームを持つ NTFS ファイルを確認できるツール
ストリームについては下記参考
http://www.atmarkit.co.jp/fwin2k/win2ktips/1363streams/streams.html
http://technet.microsoft.com/ja-jp/sysinternals/bb897440
Strings プログラム中の文字を抜き出す。ただし、日本語は抽出できない
http://technet.microsoft.com/ja-jp/sysinternals/bb897439
Sync ファイル システム データの安定性を確保し、システム障害時にデータが失われないようにするために、すべてのファイル システム データをディスクにフラッシュするようオペレーティング システムに指示する
http://technet.microsoft.com/ja-jp/sysinternals/bb897438
TCPView ネットワークの接続状況を確認するためのツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897437
VMMap プロセスの仮想メモリと物理メモリを分析するユーティリティ。このユーティリティでは、プロセスで使用している仮想メモリの種類と、オペレーティング システムによって各種類に割り当てられた物理メモリ (ワーキング セット) の量の分析結果を表示する。
http://technet.microsoft.com/ja-jp/sysinternals/dd535533
VolumeID ボリューム ID を変更する.未検証
http://technet.microsoft.com/ja-jp/sysinternals/bb897436
Whois 指定されたドメイン名または IP アドレスの登録レコードを表示
http://technet.microsoft.com/ja-jp/sysinternals/bb897435
WinObj NT オブジェクト マネージャーの名前空間の情報にアクセスしてその情報を表示する
http://technet.microsoft.com/ja-jp/sysinternals/bb896657
ZoomIt 画面を拡大したり、画面に注釈を記入したりするツール
http://technet.microsoft.com/ja-jp/sysinternals/bb897434

補足説明

DebugView

APIのOutputDebugStringで指定した文字列を表示するデバッグ用のツール。
VisualStudioなどをインストールせずに、実行環境でトレースログを出力することができる。
Releaseビルドでも出力されるので、通常のDebug実行などで再現できない不具合を追跡するのに使用する。

DebugView.png

VC++

void CDebugDemoDlg::OnBnClickedButton1()
{
    // TODO: ここにコントロール通知ハンドラ コードを追加します。
    OutputDebugString(L"TEST用の出力");
} 

VisualStudioからプロセスを実行した場合、DebugViewには何も出力されず、VisaulStudioの出力ウィンドウに出力される。

C#

private void button1_Click(object sender, EventArgs e)
{
  Trace.WriteLine("テスト1");
}

System.Diagnostics.Traceを使用する。
こちらはVisualStudioからプロセスを実行した場合でもDebugViewと出力ウィンドウの両方に出力される。

VBA

Declare Sub OutputDebugString Lib "kernel32" Alias "OutputDebugStringA" (ByVal lpOutputString As String)

Public Sub test()
    OutputDebugString "ああdddあtest"
End Sub

一応これで出力できるが、可能ならCOMでラップしてやったほうがいい。

Process Monitor

Process Monitorはリアルタイムで、プロセスのファイルやレジストリに対するアクセスを表示する。

pmon.png

Procmon.exeを管理者権限で動作させる必要がある。

このツールを用いれば、どのプロセスがどのファイルやレジストリを書き込んでいるか、または、指定のパスを操作しているプロセスはどれかを追跡することができる。

すべての情報をトレースすると量が多いので、プロセスによってフィルタをかけたり、パスにフィルタをかけるとよい。

Process Explorer

タスクマネージャの上位互換。
ProcessExp.png

呼び出したプロセスによってツリーを構築している。
ProcessExp.pngアイコンを選択後、ウィンドウズを選択すると、そのウィンドウの所属するプロセスを表示する機能も有している。

PendMovesとMoveFile

このツールの説明の前にリブート時の移動について説明する。

サービスパックや修正プログラムのように再起動後に移動や削除をおこなうためにMoveFileEx APIのフラグにMOVEFILE_DELAY_UNTIL_REBOOTがある。
http://msdn.microsoft.com/ja-jp/library/cc429621.aspx

MoveFileツールは、MoveFileExAPIをMOVEFILE_DELAY_UNTIL_REBOOTとともに実行したものである。
もし、MOVEFILE_DELAY_UNTIL_REBOOTフラグをつけたときに、移動先にブランクを入れた場合は、移動ではなく削除になる。
このフラグをつけて実行した場合、下記のレジストリに、移動情報が格納され、再起動時に実行される。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

そして、このレジストリの内容を確認するのが、PendMovesコマンドになる。

PsExec~PsSuspendコマンド

これらのコマンドは、リモートの端末に対して操作を行える。
ただし、リモートでこれらのコマンドを実行するにはリモート端末で、いくつかの設定が必要になる。

・ファイアーウォールの設定でポートを開ける
・WindowsXPの場合は、「簡易ファイルの共有を使用する」のチェックを外す
・Vista以降の場合はUACを無効にする必要がある。

これらは、セキュリティー的に不適切な設定なので、すくなくともVista以降で常時使うツールにすべきでない。

Autologon

指定のユーザでリブート時にオートログインにできる。
当然、セキュリティー的にのぞましくない。
しかし、再起動が必要な自動テストを行う場合は必要になる。

例:
OS再起動後、アプリケーションの処理を実行して速度を計測する。
それを10回繰り返すなど。

まとめ

いくつかのツールはWinXP用で動作しないものもあるが、DbgView、ProcessMonitorなどは強力なツールなので、これの有無が生産性を劇的に変えると思われる。

なお、これらは、個別でもダウンロードできる。