Windowsのとあるプロセスに対してデバックをすることになったのでメモしました。 プロセスをデバックするのに必要となったツールがntsd.exeというコマンド。 ntsd.exeとはなんだろうか? 他のキーワードとして、adplusといったキーワードもある。 デバックの仕方ももちろんのこと、調べてみることにした。 ntsdとは?ntsd.exeとは?Windows Server 2003 より前バージョンのWindowsには、標準でntsd.exeというWindowsデバックツールが存在する。 Windows Server 2008 には標準では存在しないコマンドであることがわかった。 Windows の Symbolic Debugger(シンボリックデバッカー)と言われている。 Linuxでいうところのgdbコマンドになります Windows Server 2008 上でntsdを実行するために必要なもの、WDKWDKの入手・インストール (2010/03時点で、WDK 7.1.0) WDKとは、Windows Driver Kit の略である。 WDK には、ソフトウェア開発者がドライバーやカーネル ソフトウェアを作成するために使用するヘッダー、ライブラリ、ビルド ツール、ビルド環境、コード サンプル、ドキュメント、その他のツールが含まれています。 WDK(Windows Driver Kit)内の、[Debugging Tools for Windows]コンポーネントにntsd.exeが含まれている。 インストールされるフォルダは標準で C:\WinDDK ntsd.exe が配置されているフォルダは C:\WinDDK\7600.16385.1\Debuggers でした。 Windows Driver Kit (WDK)のDebugging Tools for Windows インストール手順ダウンロードしたISOを展開します。 インストールパスを確定し、[OK]を押します。 インストールされ、コマンドが配置されているフォルダに C:\WinDDK\7600.16385.1\Debuggers Path(パス)は通っていません。Windows上での、ユーザープロセスダンプの採取手順 (ntds.exe)サンプルとして、sample.exe のプロセスダンプの採取手順とします。 sample.exeは既に実行中で、 ntsd.exe の実行まえにコマンドプロンプトのプロンプトを、ntsd.exeが配置されているパスへ移動します。 > cd " C:\WinDDK\7600.16385.1\Debuggers " [1] Windows の Symbolic Debugger (ntsd.exe) を、以下の例のとおりにコマンドプロンプトより実行していただき、sample.exe にアタッチします。 実行例: > ntsd -g -x -loga C:\ntsd-sample.log -pn sample.exe [2] sample.exe が停止・ハングするような現象を再現させます。 [3] 「セカンドチャンス (*)」で停止しましたら、以下の例のように.dump コマンドを入力し、プロセスダンプを出力します。 出力例と実行例 ----- 出力例: (17d0.2d4): Access violation - code c0000005 (first chance) (17d0.2d4): Access violation - code c0000005 (!!! second chance !!!) <== セカンドチャンス (*) eax=03f100e8 ebx=00000030 ecx=0000000c edx=00000030 esi=00000000 edi=03f100e8 eip=019437ed esp=00e8c748 ebp=00e8c7f0 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206 beclass!Copy+12d: 019437ed f3a5 rep movsd ds:00000000=???????? es:03f100e8=00000000 0:018> ----- 実行例: 0:018> .dump /f c:\sample.dmp Creating c:\sample.dmp - user full dump ----- [4] ダンプ出力が完了しましたら、.detach コマンドを入力し、ntsd を終了します。 「C:\」に出力・保存されている「C:\sample.dmp」と「C:\ntsd-sample.log」がユーザープロセスの解析用デバックログ(シンボリックデバックログ、ユーザープロセスメモリダンプファイル)になります。 Windows シンボリックデバッガは他にもある。シンボリックデバッガには NTSD (ntsd.exe) と CDB (cdb.exe) の 2
種類あります。 コマンドプロンプトから起動したとき、新しいウィンドウで起動するのが NTSD でコマンドプロンプト内で実行するのが CDB
です。 この二つはそれくらいの違いしかありません。 デバッグの基本デバッグされるプログラムのことを一般的にデバッギ (debuggee) あるいはターゲットアプリケーション (target application) といいます。デバッグするプログラムをデバッガ (debugger) といいます。 ターゲットアプリケーションにデバッガを接続することを、デバッガをアタッチ (attach) するといいます。 ターゲットアプリケーションからデバッガを切断することを、デバッガをデアタッチ (detach) するといいます。 プロセスの使用しているユーザーメモリ情報を取得することをメモリダンプといいます。 では、adplusとは?adplus機能?ADPlus は、コンソール ベースの Microsoft Visual Basic スクリプトです。 このスクリプトは Microsoft CDB デバッガを自動化し、1 つ以上のプロセスからのデバッグ出力を含むメモリ ダンプとログ ファイルを生成します。 これらのデバッグ情報 (メモリ ダンプおよびデバッグ情報を含むテキスト ファイル) は、ADPlus が実行されるたびに、ローカル ファイル システムまたはリモート ネットワーク共有上の、一意の名前を持つ新しいフォルダ (C:\Temp\Crash_Mode__Date_01-22-2001__Time_09-41-08AM など) に作成されます。 また、ADPlus によって作成される各ファイルには、古いファイルが新しいファイルで上書きされることのないように、一意の名前 (PID-1708__Inetinfo.exe__Date_01-22-2001__Time_09-41-08AM.log など) が付けられます。 つまり、cdb(ntdsも同等)を使用し自動でメモリダンプとログファイルを作成してくれるツールとなります。 「Windows上での、ユーザープロセスダンプの採取手順 (ntds.exe)」と同等を自動で行ってくれるツールと言うことですね。 (Windowsでデバッグを行うツールの総称・機能をadplusツール・adplus機能と言っている場合もあります) Windowsで使用されるデバッガWindows では、カーネル モードまたはユーザー モードの例外をデバッグするために利用できる、いくつかのデバッガが提供されています。 Windows で使われる主なデバッガには、KD (i386KD、MIPSKD、AlphaKD)、NTSD、および WinDbg の 3 つがあります。 通常、ユーザー モードの問題をデバッグするには、DLL ファイルと EXE ファイルのシンボルが必要です。 NTSD (および WinDbg) の便利な機能の 1 つに、実行中のプロセスにアタッチできるという点があります。 TLIST または PVIEWER を使用して既存のプロセスのプロセス ID を取得した後、"NTSD -p <pid>" を実行することにより、そのプロセスをデバッグできます。 WinDbgWinDbg は Windows ベースのデバッガで、カーネルまたはユーザー モードのいずれのデバッグにも利用できます。 これはテキスト ベースのデバッガに比べてサイズが大きく、多少低速ですが、いくつかの機能が追加されており、ソースレベルのデバッグやクラッシュ ダンプ ファイルの読み込みが可能です。 Windows Server 2008 ではタスクマネージャを使用しユーザー モード プロセス ダンプを取得する方法があるMicrosoft Windows Server 2008 では、Windows エラー報告 (WER) の機能によりミニ ダンプ、ヒープ ダンプのみの取得が可能となります。 なお、作成されるダンプ ファイルのおおよそのサイズは、パフォーマンス モニタを使用して確認することができます。 パフォーマンス オブジェクト として [Process]、カウンタとして [Virtual Bytes] を選択し、インスタンスとしてユーザー モード プロセス ダンプの採取対象のプロセス名を指定します。 表示される数値は、おおよそのサイズになります。
更新日:2010/03/30 |
サーバー > windows server 2008 関連 >