デバッグの基礎 : ブレークポイント
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro/Team |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
ブレークポイントは、デバッガに対して、特定の位置でプログラムの実行を一時停止するように指示します。ブレークポイントで実行が中断されると、プログラムは中断モードになります。中断モードになっても、プログラムの実行は終了しません。いつでも実行を再開できます。
中断モードは、試合中にタイムをとるのと同じです。すべての要素はそのままの状態です (たとえば、関数、変数、およびオブジェクトはそのままメモリに残されます) が、移動や動作は中断されます。中断モードでは、中断された位置と状態を検証して、違反やバグを探すことができます。中断モードでは、プログラムを調整できます。たとえば、変数の値を変更できます。実行ポイントを移動して、実行を再開したときに次に実行されるステートメントを変更できます。C++、C#、および Visual Basic では、エディット コンティニュという強力な機能を使って、中断モード時にコードを直接変更できます。
ブレークポイントは、必要なときに任意の場所で実行を中断できる強力なツールです。ブレークポイントを使用すると、コードを 1 行ずつまたは 1 命令ずつステップ実行する代わりに、ブレークポイントにヒットするまでプログラムを実行してからデバッグを開始できます。ブレークポイントの使用によって、デバッグ処理の時間が大幅に短縮されます。この機能を使用しないと、事実上、大きなプログラムのデバッグは不可能です。
多くのプログラム言語には、プログラムの実行を中断して中断モードにするステートメントまたは構成体があります。たとえば、Visual Basic には Stop ステートメントがあります。ブレークポイントは、実際にプログラムに追加されるソース コードではないため、Stop ステートメントなどとは異なります。ブレークポイントのステートメントをソース ウィンドウに入力する必要はありません。デバッガ インターフェイスを通じてブレークポイントを要求すると、デバッガによって自動的に設定されます。行ブレークポイントを挿入するには、ブレークポイントを設定する行の横にある灰色のマージンをクリックします。複雑なブレークポイントの処理には、完全な機能を備えた [ブレークポイント] ウィンドウを使用します。
ブレークポイントには、Visual Basic の Stop ステートメントなどのデバッグ構成体に比べて、有利な点が多数あります。ブレークポイントは、プログラムのソース コードを変更せずに削除したり変更したりできます。ブレークポイントはステートメントではないため、プログラムのリリース バージョンをビルドするときに余分なコードが生成されません。プログラムで Stop ステートメントを使用した場合は、リリース バージョンをビルドする前に、手動で Stop ステートメントを削除するか、または次に示す条件付きステートメントを使用する必要があります。
#If DEBUG Then
Stop
#End If
Stop ステートメントを一時的に無効にするには、ソース コード内のステートメントの場所を探し、次のようにコメント アウトする必要があります。
' Stop
Stop ステートメントが 1 つだけの場合は問題ありません。しかし、多数の Stop ステートメントがある大きなプログラムをデバッグする場合は、すべてのステートメントを探して 1 つずつコメント アウトすると時間がかかります。ブレークポイントを使用すると、[ブレークポイント] ウィンドウで一部またはすべてのブレークポイントを選択し、無効と有効を切り替えることができます。
最後に、ブレークポイントの大きな利点は、Stop ステートメントよりも柔軟性があることです。Stop ステートメントは、ステートメントがあるソース行で実行を中断します。ソース行にブレークポイントを設定した場合も、同じ効果が得られます。ただし、ブレークポイントは関数やメモリ アドレスにも設定できますが、Stop ステートメントは設定できません。Visual Studio デバッガでは、位置ブレークポイントに加えて、データ ブレークポイント (ネイティブ コードの場合のみ) も使用できます。データ ブレークポイントは、コードの任意の位置に設定するのではなく、グローバル変数やローカル変数に設定します。データ ブレークポイントを設定すると、変数の値が変化したときに実行が中断されます。
Visual Studio デバッガでは、さらに柔軟性を向上させるために、ブレークポイントの動作を変更する以下のプロパティを設定できます。
ヒット カウントを使用すると、決められた回数だけブレークポイントにヒットしたら実行が中断されるように設定できます。既定では、ブレークポイントにヒットするたびに実行が中断されます。ヒット カウントを設定すると、指定の回数 (たとえば、2 回ごと、10 回ごと、512 回ごと) のブレークポイントにヒットしてから実行を中断するようにデバッガに対して指示できます。ヒット カウントには任意の数を指定できます。初回のループの実行、関数の呼び出し、または変数へのアクセスではバグが発生しないこともあるため、ヒット カウントを使用すると便利です。場合によっては、100 回または 1000 回の反復処理の後に初めてバグが発生することもあります。このような問題をデバッグするには、ブレークポイントのヒット カウントを 100 または 1000 に設定します。
条件とは、ブレークポイントにヒットするかスキップするかを指定する式です。デバッガでは、ブレークポイントに到達すると、条件を評価します。ブレークポイントにヒットするのは、条件が満たされている場合だけです。条件付きの位置ブレークポイントを使用すると、特定の条件を満たす場合にだけ、指定した位置で実行を中断できます。たとえば、銀行のプログラムをデバッグする場合に、預金残高がマイナスになることが許可されないプログラムがあるとします。この場合は、コードのいくつかの位置にブレークポイントを設定し、各ブレークポイントに balance < 0 のような条件を付加します。プログラムを実行すると、ブレークポイントの位置で残高がゼロより少ない場合にだけ実行が中断されます。最初のブレークポイント位置で変数とプログラム状態をチェックしてから、引き続き 2 番目のブレークポイント位置まで実行し、同様の処理を繰り返します。
アクションで、ブレークポイントにヒットしたときに実行する動作を指定します。既定では実行が中断されますが、代わりにメッセージの印刷または Visual Studio マクロの実行を選択できます。中断する代わりにメッセージの印刷を選択すると、ブレークポイントは、Trace ステートメントとよく似た機能になります。このブレークポイントの使用方法は、トレースポイントと呼ばれます。
フィルタで、ブレークポイントのプロセスまたはスレッドを指定できます。
メモ : 特に便利な方法として、[呼び出し履歴] ウィンドウでのブレークポイントの設定があります。[呼び出し履歴] ウィンドウを使用すると、特定の関数呼び出しにブレークポイントを設定できます。関数呼び出しにブレークポイントを設定すると、再帰関数 (自身を呼び出す関数) のデバッグに特に役立ちます。特定の回数だけ呼び出した後に実行を中断する場合は、[呼び出し履歴] ウィンドウを使用すると、まだ戻っていない前の呼び出しのうちの 1 つにブレークポイントを設定できます。デバッガは設定されたブレークポイントを検出し、現在の呼び出しの外で実行を中断します。