投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/8/12 17:40:55
> もうすこし詳しく教えて頂けると幸いです。 
デバッグの方法は、VB中学校の[初級講座]でも触れられていますので、まだ読んだことが無ければ
 第41回 実行の一時停止とデバッグ
 第42回 初めてのデバッグ
を参考にしてみてください。図解されている VB のバージョンがやや古いですが、
書かれている内容そのものは、現在のバージョンにもあてはまります。


デバッグ中断中に[F10]キーを押すと、一行進みます(ステップ実行)。
処理順をチェックする場合にも便利なので、こうしたデバッグ機構を習得しておくと、
開発作業が楽になりますよ。



> ブレークポイントの所で一時停止まで、できたのですが
という事は、Else 句が実行されてしまう状況であることまでは確認できているかと思います。

その次に行うのは、何故 Else が実行されてしまっているのかのチェックです。
すなわち、If 文の条件がどのような値になっているのかを確認するという作業のため。


今回は説明の為、
> If ○○○○.○○○ = ○○ Then
の部分が、
If e.Url.ToString() = "http://homepage1.nifty.com/rucio/main/main.htm" Then
と書かれていたと仮定して説明していきます。


こういった条件式の値を確認する方法としては、以下のような手法があります。

デバッグにはいろいろな方法がありますので、下記に挙げた手順を一つ一つ試してみて、
その時々にあったデバッグ機能を使いわけてみてください。


===================
(1) ツールチップで確認する方法
-------------------
中断モードにおいては、変数名にマウスカーソールを重ねてしばらく待機すると、
ツールチップ内に変数の内容が表示されるようになっています。

これを使えば、e.Url が返している内容をチェックすることができるでしょう。


このツールチップは、左横の[+]ボタンで階層を展開できます。
また、VS2010 以降のバージョンでは、ツールチップ右横の虫ピンアイコンを使って、
これを常に表示させたままにしておくこともできます。

また、VS2008以降のバージョンでは、ツールチップ表示中に Ctrl キーを押すことで、
一時的にツールチップが半透明になり、下の文字を読み取めるようになっています。



===================
(2) 「自動変数」を利用する方法
-------------------
中断モードのこのウィンドウには、現在のプロシージャ内で使用中の変数が一覧されます。


自動変数ウィンドウをうっかり閉じてしまった場合には、中断モード時に、
メニューの[デバッグ]-[ウィンドウ]-[自動変数] から再表示できます。



===================
(3) 「クイック ウォッチ」を利用する方法
-------------------
デバッグしたい式、たとえば「e.Url.ToString()」の部分をドラッグで反転させた後、
マウスで右クリックします。次に右クリックメニュー(コンテキストメニュー)から、
[クイック ウォッチ]を選択すると、その式の現在の値が表示されます。

これにより、現在の URL が "http://homepage1.nifty.com/rucio/main/main.htm" なのか、
それとも "http://www.google.co.jp/" だったのかなどを確認することができます。


クイックウォッチに指定するデバッグ式は自由に設定できます。具体的には、
 「e.Url.ToString()」
 「e.Url」
 「e.Url.ToString() = "http://homepage1.nifty.com/rucio/main/main.htm"」
などといったものです。


===================
(4) 「ウォッチ」を利用する方法
-------------------
[クイックウォッチ]と似たものとして、[ウォッチ式]という機能もあり、
これも同様に、右クリックメニューから指定できるようになっています。

「クイックウォッチ」の場合は、一つのデバッグ式しか表示できなかったのですが、
「ウォッチ式」では複数の変数や式の値を同時に並べて表示できます。



一つのウォッチウィンドウには、複数の式を表示させることができますし、
ウォッチウィンドウ自体を複数(最大4枚まで)開くこともできます。
ウォッチウィンドウをうっかり閉じてしまった場合には、中断モード時に、
メニューの[デバッグ]-[ウィンドウ]-[ウォッチ] から再表示できます。

ウォッチ したい条件を増やしたい場合には、ウォッチウィンドウ上に、
条件式などを直接記述してみてください。



===================
(5) イミディエイト ウィンドウを利用する方法
-------------------
イミディエイト ウィンドウは、値のチェックや簡易ステートメント実行に利用できる、
非常に汎用性の高いデバッグツールです。

まずは中断モード中に[イミディエイト] ウィンドウを表示させてください。
これは通常、Ctrl + Alt + I のキーボードショートカットで表示されるようになっています。
(Ctrl と Alt キーを押しながら I を押すということです)

メニューから起動させる場合には、[デバッグ]-[ウィンドウ]-[イミディエイト] です。


このイミディエイト ウィンドウで、? に続けて式を書くと、その式の内容が表示されます。
たとえば「? e.Url.ToString()」などですね。


ここでは変数値の確認の他、「Me.Button1.Visible = True」などのように、プロパティや変数の
代入操作も行えますし、「MsgBox("TEST")」などのようにメソッドの実行テストも行えます。

また、イミディエイト上で「foo = 123」「abc = "TEST"」などといった、
未宣言の変数への代入を行うと、自動的に変数 foo や変数 abc が
一時的に作成されます。数値計算結果などをチェックする場合にも便利かと。



===================
(6) Debug.WriteLine や Debug.Print 等を用いる方法
-------------------
調査したい DocumentCompleted イベントの先頭に、
 Debug.WriteLine(e.Url)
という一行を記述しておきます。
こうすると、その時の変数の値がデバッグ画面上に表示されます。


出力先は、「出力 ウィンドウ」となります。
出力ウィンドウが無い場合は、[デバッグ]-[ウィンドウ]メニューで表示できます。
(EXE 作成時の構成が、"Debug"ではなく"Release"になっているときは出力されません)


なお、出力ウィンドウの代わりに「イミディエイト ウィンドウ」に
表示される場合もあります。どちらに表示されるかは、Visual Studioの
[ツール]-[オプション]ダイアログにある、[デバッグ]-[全般]の
『☑出力ウインドウの文字をすべてイミディエイトウインドウにリダイレクトする』
で切り替えられます。
上記項目が見つからない場合は、オプションダイアログ下部にある
「すべての設定を表示」の欄を切り替えてみてください。


この Debug を用いる方法だと、コードを一時停止させずに値を確認できるため、
連続したイベントの流れを追う場合などに都合が良いでしょう。

Debug の内容は、テキストファイルやイベントログ、あるいは任意の出力先(データベース等)に
出力させることもできます。開発環境が入っていない実行環境でのテスト時にも便利ですよ。