.NETアプリケーションの実行が失敗したとき,多くの場合はメモリダンプが残るだけである。Visual Studioではメモリダンプを扱えないので,代わりにWinDbgというツールを使わなければならない。このとき合わせて使用されるのがSOS.dllやPsscor4.dllといった,.NET固有の詳細情報を取得するエクステンションだ。これらはパワフルではあるが使用が難しいので,時には開発者自身がエクステンションを作ることもある。そのような開発者のひとり,Rodney Viana氏がnetext 1.6.1をオープンソースプロジェクトとしてリリースした。
netextのユニークな部分は,SQLライクな文法を使ってヒープの内容を問合せできることだ。例えば,最近発生したWeb要求のエラー一覧を見たいとしよう。HttpRequestオブジェクトはキャッシュされているので,次のような指示を使ってエラー終了したクエリを探すことができる:
!wfrom -type *.HttpContext |
where ( ($contains(_request._url.m_String, "http:")) && (_response._statuscode != 0n200) )
select $addr(), _request._url.m_String, _response._statusCode
サポートされるコマンドは次のものだ:
オブジェクトの詳細を表示するコマンド
- !wdo - その時点でのオブジェクトまたは配列を,GACまたはStackから表示する。
- !wselect - その時点でのオブジェクトあるいは配列の全項目のフィールド(とレベルフィールド)を表示する。
- !wfrom - ヒープオブジェクトのSQLライクな解析を実行する。比較,式評価,インデックス付きのフィルタリングなどの操作が可能だ。
オブジェクトの列挙
- !windex – HttpContext型のオブジェクトというように,異なるフィルタに基づくオブジェクトのインデックス付けと表示を行う。
- !wstack – 独自スタック上のオブジェクトをダンプする。
- !wheap – インデックスを伴わないオブジェクトの一覧と,ヒープの限定的なサンプリング情報を表示する。
- !wgchandles – GCルートハンドルをダンプする。
特殊な機能
- !wdict – ディクショナリオブジェクトを表示する。
- !whash – ハッシュテーブルオブジェクトを表示する。
- !whttp – HttpContextオブジェクト一覧を表示する。
- !wconfig – メモリ内の .configファイル行をすべて表示する。
- !wservice – WCFサービスオブジェクト一覧を表示する。
- !weval – 式リストを評価する。
- !wclass – "refrect" されたクラス定義 (フィールド,プロパティ,メソッド) を表示する。
さらにアグリゲーションや文字列, XML,配列,リフレクションを操作する関数もサポートする。
NetextはGNU General Public License バージョン2を適用して公開されている。Rodney Viana氏はMicrosoftの社員だが,この開発は氏の個人的なプロジェクトとして見なされていて,Microsoftのサポートは受けていない。