デバッグとは、ソフトウェアにおけるプログラムのバグ(誤りや欠陥)を探して、正しく動作するように修正する作業のことである。
プログラムは人間が作成するため、誤りが混入してしまうことがある。プログラミングの段階で注意を払うことで、バグの混入確率を低くすることは可能だが、ゼロにすることは難しい。そのため、品質向上のためにデバッグが果たす意味は大きいといえる。
デバッグには、人それぞれの考え方や方法論があり、誤りや欠陥を探し当てて、的確に修正する行為は技術力の差として顕著である。また、デバッグは、不具合を修正するだけであると捉えがちだが、発見や再現、理解、恒久対策といった一連のプロセスもデバッグに含まれる。
なお、統合開発環境(IDE)やデバッガの進化、開発効率化のためのテストファーストやTDD(テスト駆動開発)の流行に伴い、デバッグを行いながらテストをするスタイルが見られるが、これらは、厳密にはデバッグと呼ばない。
構文
解説Debug クラスのメソッドを使用し、デバッグ情報を出力し、アサーションと照らし合わせて論理チェックを行うことで、パフォーマンスや出荷製品のサイズに影響を与えることなくコードの信頼性を高めることができます。
Visual Studio 2005 プロジェクトでは、デバッグ ビルドを作成することにより、Debug が有効になります。Debug を無効にする方法については、Visual Studio 2005 ドキュメントを参照してください。
これに対して Visual Studio 2005 プロジェクトでの Trace は、リリース ビルドでもデバッグ ビルドでも既定で有効になるため、リリース ビルドとデバッグ ビルドの両方ですべてのトレース メソッドのためのコードが生成されます。したがって、Trace を使用してリリース ビルドをインストルメントできます。
このクラスには、Assert ダイアログ ボックスを表示するメソッド、および常に Fail になるアサーションを出力するメソッドが用意されています。このクラスは次の種類の書き込みメソッドを提供します。Write、WriteLine、WriteIf、および WriteLineIf。
BooleanSwitch クラスおよび TraceSwitch クラスは、トレース出力を動的に制御する手段を提供します。これらのスイッチの値はアプリケーションを再コンパイルせずに変更できます。構成ファイルを使ってスイッチを設定する方法の詳細については、Switch クラスのトピックおよび「トレース スイッチ」を参照してください。
Listeners コレクションに TraceListener インスタンスを追加したり、コレクションからインスタンスを削除することによって、トレース出力対象をカスタマイズできます。既定では、DefaultTraceListener クラスはトレース出力を出力します。
Indent メソッドまたは IndentLevel プロパティを使用して、インデントのレベルを変更できます。インデントの文字間隔を変更するには、IndentSize プロパティを使用します。AutoFlush プロパティを true に設定することによって、書き込むたびに出力バッファを自動的にフラッシュするかどうかを指定できます。
Debug の AutoFlush や IndentSize を設定するために、アプリケーション名に対応する構成ファイルを編集することもできます。構成ファイルの書式は次の例のようになります。
<configuration> <system.diagnostics> <trace autoflush="true" indentsize="7" /> </system.diagnostics> </configuration>
メモ |
|---|
| C# でデバッグを有効にするには、コードのコンパイル時に /d:DEBUG フラグをコンパイラのコマンド ラインに追加するか、#define DEBUG をファイルの最上部に挿入します。Visual Basic では、コンパイラのコマンド ラインに /d:DEBUG=True フラグを追加します。C++ でこれと同等の機能を使用するには、このクラスのメソッド呼び出しを #ifdef DEBUG... #endif ブロックで囲む必要があります。この構文はコンパイラ固有です。Debug のメソッドには条件付きコンパイル属性があるため、上記以外のコンパイラを使用する場合は、使用するコンパイラのドキュメントを参照して条件付きコンパイルを有効にする必要があります。 |
使用例Debug を使用してプログラム実行の最初と最後を指定する例を次に示します。この例では、Indent と Unindent も使用してトレース出力を区別します。
Shared Function Main(args() As String) As Integer Debug.Listeners.Add(New TextWriterTraceListener(Console.Out)) Debug.AutoFlush = True Debug.Indent() Debug.WriteLine("Entering Main") Console.WriteLine("Hello World.") Debug.WriteLine("Exiting Main") Debug.Unindent() Return 0 End Function 'Main
static int Main(string[] args) { Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); Debug.AutoFlush = true; Debug.Indent(); Debug.WriteLine("Entering Main"); Console.WriteLine("Hello World."); Debug.WriteLine("Exiting Main"); Debug.Unindent(); return 0; }
#using <System.dll> int main( void ) { using namespace System; using namespace System::Diagnostics; Debug::Listeners->Add( gcnew TextWriterTraceListener( Console::Out ) ); Debug::AutoFlush = true; Debug::Indent(); Debug::WriteLine( "Entering Main" ); Console::WriteLine( "Hello World." ); Debug::WriteLine( "Exiting Main" ); Debug::Unindent(); return 0; }
継承階層
スレッド セーフ
プラットフォームWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照
パブリック メソッド
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
参照コードのデバッグに使用するメソッドとプロパティのセットを提供します。このクラスは継承できません。
Debug データ型で公開されるメンバを以下の表に示します。
パブリック プロパティ
パブリック メソッド
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
参照