現在オフラインです。再接続するためにインターネットの接続を待っています

Visual Basic 2005 または Visual Basic .NET でのトレースとデバッグ方法

この記事は、以前は次の ID で公開されていました: JP313417
Microsoft Visual Basic 6.0 については、次の資料を参照してください。161153
概要
この資料では、Debug クラスと Trace クラスの使用方法について説明します。Debug クラスと Trace クラスは Microsoft .NET Framework で利用できます。これらのクラスを使用すると、アプリケーションの開発段階または運用環境への導入後に、アプリケーションのパフォーマンスに関する情報を提供できます。これらのクラスは .NET Framework で利用可能な制御機能のごく一部です。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows 2000 または Microsoft Windows XP
  • Microsoft Visual Basic 2005 または Microsoft Visual Basic .NET
この資料は、プログラムのデバッグについて詳しい知識のあるユーザーを対象としています。

技法の説明

「Debug クラスを使用するサンプルを作成する」の手順では、Debug クラスを使用して、プログラム実行時の情報を提供するコンソール アプリケーションを作成します。

Debug クラスのメソッドを使用すると、プログラム実行時に、監視、問題の検出、またはパフォーマンス計測データの提供に役立つメッセージを生成できます。Debug クラスによって生成されたメッセージは、デフォルトで Microsoft Visual Studio の統合開発環境 (IDE) の出力ウィンドウに表示されます。

サンプル コードでは、WriteLine メソッドを使用して、行ターミネータで終わるメッセージを生成します。このメソッドを使用して生成されたメッセージは、メッセージごとに改行されて、出力ウィンドウに表示されます。

Debug クラスの Assert メソッドを使用すると、指定された条件が False と評価された場合にのみ、出力ウィンドウにメッセージが表示されます。ユーザーに対するメッセージは、モーダル ダイアログ ボックスに表示されます。このダイアログ ボックスには、メッセージ、プロジェクト名、Debug.Assert のステートメント番号、および以下の 3 種類のコマンド ボタンが表示されます。
  • 中止 : このボタンをクリックすると、アプリケーションが停止します。
  • 再試行 : このボタンをクリックすると、アプリケーションがデバッグ モードに入ります。
  • 無視 : このボタンをクリックすると、アプリケーションが続行されます。
ユーザーがいずれかのボタンをクリックしない限り、アプリケーションの処理は続行されません。

Debug クラスからの出力は、出力ウィンドウ以外の出力先にも出力できます。Debug クラスには、Listener オブジェクトを含む "Listeners" という名前のコレクションがあります。個々の Listener オブジェクトが Debug クラスからの出力を監視し、指定された出力先へ出力します。また、Listeners コレクションの各 Listener オブジェクトは Debug クラスで生成された内容を受信します。Listener オブジェクトを定義するには、TextWriterTraceListener クラスを使用します。TextWriterTraceListener クラスの出力先は、コンストラクタを使用して指定できます。主な出力先を次に示します。
  • コンソール ウィンドウ (System.Console.Out プロパティを使用)
  • テキスト (.txt) ファイル (System.IO.File.CreateText("FileName.txt")) ステートメントを使用)
Debug クラスの出力を受け取るには、TextWriterTraceListener オブジェクトを作成後、そのオブジェクトを Debug.Listeners コレクションに追加する必要があります。

Debug クラスを使用するサンプルを作成する

  1. Visual Basic 2005 または Visual Basic .NET を使用して、conInfo という名前の新しいコンソール アプリケーション プロジェクトを作成します。プロジェクトにはデフォルトで、Module1 という名前のパブリック モジュールが追加されます。
  2. 変数が製品情報で初期化されるように、次の Dim ステートメントを追加します。
    Dim sProdName As String = "Widget"Dim iUnitQty As Integer = 100Dim dUnitCost As Decimal = 1.03					
  3. WriteLine メソッドの最初の入力パラメータとして、クラスから生成されるメッセージを指定します。Ctrl + Alt + O キーを押して、出力ウィンドウが表示されることを確認します。
    Debug.WriteLine("Debug Information-Product Starting ")					
  4. 出力ウィンドウでの読みやすさを考慮し、Indent メソッドを使用して後続のメッセージを字下げします。
    Debug.Indent()					
  5. 選択した変数の内容を表示するには、WriteLine メソッドを次のように使用します。
    Debug.WriteLine("The product name is " & sProdName)Debug.WriteLine("The available units on hand are " & iUnitQty)Debug.WriteLine("The per unit cost is " & dUnitCost)					
  6. WriteLine メソッドはまた、既存のオブジェクトの名前空間とクラス名の表示にも利用できます。たとえば、次のコードを入力すると、出力ウィンドウに System.Xml.XmlDocument 名前空間が表示されます。
    Dim oxml As New System.Xml.XmlDocument()Debug.WriteLine(oxml)					
  7. 出力を整形するため、WriteLine メソッドの 2 番目の入力パラメータ (省略可能) としてカテゴリを指定できます。カテゴリを指定すると、出力ウィンドウのメッセージは、"category: message" の形式で表示されます。たとえば、以下のコードの先頭の行を実行すると、出力ウィンドウには "Field: The product name is Widget" と表示されます。
    Debug.WriteLine("The product name is " & sProdName, "Field")Debug.WriteLine("The units on hand are " & iUnitQty, "Field")Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")Debug.WriteLine("Total Cost is" & iUnitQty * dUnitCost, "Calc")					
  8. Debug クラスの WriteLineIf メソッドを使用すると、指定した条件が True と評価された場合にのみ、メッセージが出力ウィンドウに表示されます。このとき、WriteLineIf メソッドの最初の入力パラメータが、条件として評価されます。WriteLineIf の 2 番目のパラメータには、最初のパラメータの条件が True と評価された場合にのみ表示するメッセージを指定します。
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")					
  9. 指定した条件が False と評価された場合にのみ、出力ウィンドウにメッセージを表示するには、以下のように Debug クラスの Assert メソッドを使用します。
    Debug.Assert(dUnitCost > 1, "Message will NOT appear")Debug.Assert(dUnitCost < 1, "Message will appear")					
  10. コンソール ウィンドウ (tr1) と Output.txt という名前のテキスト ファイル (tr2) のそれぞれに対応する TextWriterTraceListener オブジェクトを作成し、作成したオブジェクトを Debug Listeners コレクションに追加します。
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)        Dim tr2 As New _  TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))Debug.Listeners.Add(tr2)					
  11. 読みやすさを考慮し、Unindent メソッドを使用して、Debug クラスから生成される後続のメッセージの字下げを解除します。Indent メソッドと Unindent メソッドを併用することで出力がグループ分けされ、読みやすくなります。
    Debug.Unindent()Debug.WriteLine("Debug Information-Product Ending")					
  12. 個々の Listener オブジェクトですべての出力を受け取れるよう、Debug クラスのバッファに対して Flush メソッドを呼び出します。
    Debug.Flush()					

Trace クラスの使用

アプリケーションの実行状況を監視するメッセージは、Trace クラスを使用して生成することもできます。以下に示すように、出力の生成に使用するメソッドはその大半が Trace クラスと Debug クラスで共通しています。
  • WriteLine
  • WriteLineIf
  • Indent
  • Unindent
  • Assert
  • Flush
Trace クラスと Debug クラスは同じアプリケーション内で、個別または同時に使用できます。Debug ソリューション構成のプロジェクトでは、Trace クラスの出力と Debug クラスの出力は両方ともアクティブなため、すべての Listener オブジェクトに対して両方のクラスからの出力が生成されます。これに対して、Release ソリューション構成のプロジェクトでは、Trace クラスの出力のみ生成されます。Debug クラスのメソッドによる呼び出しはすべて無視されます。
Trace.WriteLine("Trace Information-Product Starting ")Trace.Indent()Trace.WriteLine("The product name is " & sProdName)Trace.WriteLine("The product name is " & sProdName, "Field")Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")Trace.Assert(dUnitCost > 1, "Message will NOT appear")Trace.Unindent()Trace.WriteLine("Trace Information-Product Ending")Trace.Flush()Console.ReadLine()				

動作の検証

  1. 現在のソリューション構成が Debug であることを確認します。Visual Basic 2005 の場合は、ソリューション構成の設定は必要ないため、以下の手順 2. ~ 5. までは不要です。
  2. ソリューション エクスプローラ ウィンドウが表示されていない場合は、Ctrl + Alt + L キーを押して表示します。
  3. [conInfo] を右クリックし、[プロパティ] をクリックします。
  4. [conInfo のプロパティ ページ] の左側のペインで、矢印が [構成プロパティ] フォルダの下の [デバッグ] をポイントしていることを確認します。
  5. [構成プロパティ] フォルダの上にある [構成] ボックスの [アクティブ (Debug)] または [Debug] をクリックし、[OK] をクリックします。
  6. Ctrl + Alt + O キーを押して出力ウィンドウを表示します。
  7. F5 キーを押してコードを実行します。[アサートに失敗しました] ダイアログ ボックスが表示されたら [無視] をクリックします。
  8. コンソール ウィンドウで Enter キーを押します。これによりプログラムが終了し、出力ウィンドウ (Visual Basic 2005 の場合は、イミディエイト ウィンドウ) に次の内容が表示されます。
    Debug Information-Product Starting    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03    System.Xml.XmlDocument    Field: The product name is Widget    Field: The units on hand are 100    Field: The per unit cost is 1.03    Calc: Total cost is 103    This message WILL appear    ---- デバッグ アサート失敗 -------- 短いメッセージのアサート ----Message will appear---- 長いメッセージのアサート ----    at Module1.Main()  C:\Documents and Settings\Administrator\My    Documents\Visual Studio Projects\conInfo\Module1.vb(29)    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting    The product name is Widget    Field: The product name is Widget    This message WILL appearTrace Information-Product Ending						
  9. コンソール ウィンドウと Output.txt ファイルには、次の内容が出力されます。
    (Output.txt ファイルは、conInfo.exe 実行ファイルと同じディレクトリにあります。通常このディレクトリは、プロジェクトのソースが保存されている場所の \bin フォルダです。デフォルトでは C:\Documents and Settings\ユーザー ログイン\My Documents\Visual Studio Projects\conInfo\bin になります。)    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting    The product name is Widget    Field: The product name is Widget    This message WILL appearTrace Information-Product Ending						

完全なコード リスト

Module Module1    Sub Main()        Dim sProdName As String = "Widget"        Dim iUnitQty As Integer = 100        Dim dUnitCost As Decimal = 1.03        Debug.WriteLine("Debug Information-Product Starting ")        Debug.Indent()        Debug.WriteLine("The product name is " & sProdName)        Debug.WriteLine("The available units on hand are " & iUnitQty)        Debug.WriteLine("The per unit cost is " & dUnitCost)        Dim oxml As New System.Xml.XmlDocument()        Debug.WriteLine(oxml)        Debug.WriteLine("The product name is " & sProdName, "Field")        Debug.WriteLine("The units on hand are " & iUnitQty, "Field")        Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")        Debug.WriteLine("Total cost is " & iUnitQty * dUnitCost, "Calc")        Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")        Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")        Debug.Assert(dUnitCost > 1, "Message will NOT appear")        Debug.Assert(dUnitCost < 1, "Message will appear")        Dim tr1 As New TextWriterTraceListener(System.Console.Out)        Debug.Listeners.Add(tr1)        Dim tr2 As New _          TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))                Debug.Listeners.Add(tr2)        Debug.WriteLine("The product name is " & sProdName)        Debug.WriteLine("The available units on hand are " & iUnitQty)        Debug.WriteLine("The per unit cost is " & dUnitCost)        Debug.Unindent()        Debug.WriteLine("Debug Information-Product Ending")        Debug.Flush()        Trace.WriteLine("Trace Information-Product Starting ")        Trace.Indent()        Trace.WriteLine("The product name is " & sProdName)        Trace.WriteLine("The product name is " & sProdName, "Field")        Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")        Trace.Assert(dUnitCost > 1, "Message will NOT appear")        Trace.Unindent()        Trace.WriteLine("Trace Information-Product Ending")        Trace.Flush()        Console.ReadLine()    End SubEnd Module				

トラブルシューティング

  • ソリューション構成の種類が Release の場合、Debug クラスの出力は無視されます。
  • 特定の出力先に対して TextWriterTraceListener クラスを作成した場合、TextWriterTraceListener は Trace および Debug の両方のクラスから出力を受け取ります。Listeners クラスに TextWriterTraceListener を追加する場合、どちらのクラスの Add メソッドを使用しても、この動作に変わりはありません。
  • Trace クラスと Debug クラスで、同じ出力先に対して Listener オブジェクトを追加した場合、どちらのクラスから出力が生成されても、同じ行が 2 回ずつ出力されます。
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)Dim tr2 As New TextWriterTraceListener(System.Console.Out)Trace.Listeners.Add(tr2)					
関連情報
詳細情報については、.NET Framework SDK の、クラス ライブラリの項目にある以下のトピックを参照してください。トレースに関する詳細については、Microsoft .NET Framework SDK クイック スタート チュートリアルの以下のトピックを参照してください。
タスクの例 : トレースを使用する
http://ja.gotdotnet.com/quickstart/howto/doc/Trace.aspx

タスクの例 : 小さなアプリケーションにトレース機能を装備する
http://ja.gotdotnet.com/quickstart/howto/doc/TraceDemo.aspx
プロパティ

文書番号:313417 - 最終更新日: 10/03/2006 20:32:00 - リビジョン: 3.3

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbhowtomaster kbbug kbdebug kbvs2002sp1sweep kbvs2005applies kbvs2005swept KB313417
フィードバック
="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >