ASP.NET 運用デバッグ入門 2) デバッガの動作確認

こんにちは、d99 です。

さて、前回の連載エントリで Debugging Tools Windows のインストールまでを解説しました。今回は、さらにそれを使ってちょっとしたデバッガの "動作確認" をしてみましょう。

- 用意するもの

1) テスト用 IIS

なければ Visual Studio 付属の ASP.NET 開発サーバでも構いません。IIS をお使いの際には、アプリケーションを作成しておいてください。また、ASP.NET を動かすので、.NET Framework のインストールがもちろん必要です。バージョンは特に問いません。

2) 以下のコードを記述したページ
 System.Diagonostics.Debug.WriteLine("hoge");

Visual Studio をお使いの場合は、Page_Load あたりにでも上記の一行を記述してください(C# です)。もしくは以下の一行だけのテキストファイルをテキストエディタで作成して、アプリケーションフォルダに置くだけでも構いません。

 <%  System.Diagonostics.Debug.WriteLine("hoge") %>
3) 以下の内容の web.config
  <compilation debug="true" />      

Visual Studio をお使いの場合は、プロジェクトに [Web 構成ファイル] を追加し、上記の行があると思いますので、false を true へ書き換えてください。テキストエディタ党 :-) の方は、以下の web.config をアプリケーションフォルダに置いてください。

  <?xml version="1.0" encoding="utf-8"?>
 <configuration>
    <system.web>
        <compilation debug="true" />
    </system.web>
 </configuration>
4) そしてもちろん Debugging Tools for Windows

インストール方法については [前回のエントリ] を参照してください。

- 動作確認手順

1) まずは、[用意] の 2) で作成したページをブラウザで見てみましょう。ブラウザで要求するか、Visual Studio の方は Ctrl + F5 で [デバッグなしで実行] します。真っ白なページなので、特に何も画面には表示されません。

Debug.WriteLine() メソッドは、デバッガに文字列を出力するメソッドなので、デバッガがなければ何も起きません。Visual Studio で [デバッグ実行] している場合は [出力] タブに hoge と表示されます。デバッグ時のちょっとした内部変数の確認などで便利なメソッドです。

2) デバッガを起動し、アタッチします。プログラムメニューから、[Debugging Tools for Windows] - [windbg] を起動します。[File] メニューから [Attach to a Process] を選択し、出てきたダイアログで、適切なプロセスを選び、[OK] を押します。

IIS 5.x(Windows 2000、Windows XP)の場合

aspnet_wp.exe

IIS 6.0、7.0(Windows Server 2003、2008、Windows Vista)の場合

w3wp.exe

ASP.NET 開発サーバの場合

WebDev.WebServer.exe

※ コマンドライン派 :-) の方は、デバッガをインストールしたフォルダに移動し、以下のコマンドを実行してください。これは「既に起動している指定の名前のプロセスにデバッガをアタッチする」起動オプションになります。この指定方法の場合、同名のプロセスが複数起動していると全てにアタッチされてしまうので、その点だけ注意してください。

windbg -pn 上記プロセス名

3) [Save information for workspace] といったダイアログが出る場合がありますが、[No] で構いません。

4) デバッガがプロセスにアタッチされます。ブレークしますので、[GO] します。メニューやボタン、F5 キーなどでもいいのですが、やや玄人っぽく [Command] 子ウィンドウを最大化してから 0:0nn>(n は任意の数字)と出ているプロンプトに g と入力して Enter を押下します

5) ブラウザを [再読み込み] します。デバッガにいろいろなログが出る場合もありますが、それに混じって「hoge」という行が表示されるのがご確認頂けるかと思います。

- 考察

このようにアプリケーション自体にデバッガを意識したコードを書くことで、この windbg とかいうツールも "デバッガ" として動作している事が御確認頂けたかと思います。まぁ、当たり前なんですが :-)。

web.config をいじっている点からもお分かりいただけるように、debug="false" ではこの出力は行われません。コードだけ仕込んでおいて、何か起きたら debug="true" にしてデバッガをアタッチしログを確認する、なんて事も出来そうですね。Visual Studio を運用環境に入れるのは難しいと思いますが、Debugging Tools for Windows であればフォルダコピーでいいし、windbg なら Visual Studio よりは軽いので扱いやすいかなと思います。

なお、windbg.exe を使っていますが、ほぼ同機能のコマンドラインデバッガ、cdb.exe も Debugging Tools for Windows には含まれています。コマンドライン派の方はそちらをお試しください。コマンドは同じものが使えます。

- 次回予告

次は、もうちょっと下層を見てみたいと思います。

今は C# や VB.NET のプログラムコードのレベルで見ていますが、それが OS に伝わるまでにはいくつかの伝言ゲームが行われます。その伝言ゲームの過程、OS に伝わるところでは Windows API という必ず決まった出入り口を通過します。ですので、ここを覗き見れば別に自分が作ったアプリケーションじゃなくても、マネージドでもアンマネージドでも、元々のソースコードが C# でも VB.NET でも VB6 でも「ははーん、概ねこんな事してるんだな」というのは伺い知れる事になります。デバッグにはこの「ははーん」というのがわりと重要だったりしますので。

ではまた。
d99 でした。