ブレークポイント

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Eclipseのデバッグインタフェースで、プログラムがブレークポイントで停止している様子

ブレークポイント: breakpoint)は、ソフトウェア開発デバッグ作業において実行中のプログラムを意図的に一時停止させる箇所である。ブレークポイントの指定機能は多くのデバッガに備えられており、これを用いることでプログラムの任意箇所への到達を自動的に捕捉できる。ブレークポイントでの停止後、プログラマは通常のデバッグ作業同様に実行環境(メモリレジスタログ、ファイルなど)を観察し、プログラムが期待通りに機能しているかどうかを判断する。

通常、ブレークポイントにはプログラムの実行を中断させるかどうかを決定する1つ以上の条件を設定できる。

最も一般的なブレークポイントは、指定した命令を実行する前にプログラムの実行を停止する。これを「命令ブレークポイント」などと呼ぶ。

また、メモリの特定領域の読み込み、書き込み、更新をトリガーとして停止させる場合もある。これを「データブレークポイント」あるいは「ウォッチポイント」などと呼ぶ。

他にも時刻を指定する方式のブレークポイント、キー入力などをトリガーとするブレークポイントがある。

CPUの多くはブレークポイントをハードウェアでサポートしている。このハードウェアには、分岐遅延スロットにある命令にはブレークポイントを設定できないなどといった制限がある場合もある。そのような制限はマイクロアーキテクチャに起因するもので、プロセッサによって様々である。大まかに言えば、ブレークポイントに到達すると例外を発生し、それによってデバッグ対象プロセスを実行できない状態に遷移させ、デバッガプロセスに制御を移す。

ハードウェアがサポートしていない場合、デバッガでソフトウェア的にブレークポイントを実装する必要がある。命令ブレークポイントの場合、単にブレークポイントを設定した命令を別の命令に置換すればよい。しかし、データブレークポイントをソフトウェアで実現しようとすると、デバッグ対象アプリケーションの性能が大幅に低下することが多い[1]

プログラミング言語の実装によっては、デバッグ機能を他のプログラムに公開している場合もある。例えば、FORTRANの一部の方言には AT 文があるが、これは元々は命令ブレークポイントのためのものだった。Pythonには Python プログラムからアクセス可能なデバッガが実装されている[2]。このような機能を乱用するとCOMEFROM文のような機能が実装できる[3]

脚注・出典[編集]