このセクションでは、ブレークポイントを使用するためのいくつかの高度な技術について説明します。
ブレークポイントカウントの使用法
境界ブレークポイントの使用法
役立つブレークポイントカウントのピッキング
ウォッチポイント
ブレークポイント条件の使用法
ポップを使用したマイクロ再実行
修正と継続機能の使用法
このセクション、およびプログラム例は、ここで紹介する手順とほぼ同じものを使用して dbx で実際に検出されたバグを基にしています。
ソースコードには in というサンプル入力ファイルが含まれており、これを使用してプログラム例でバグを発生させます。in には次のコードが含まれています。
display nonexistent_var # should yield an error display var stop in X # will cause one "stopped" message and display stop in Y # will cause second "stopped" message and display run cont cont run cont cont
この入力ファイルでプログラムを実行すると、出力は次のようになります。
$ a.out < in
> display nonexistent_var
error: Don't know about 'nonexistent_var'
> display var
will display 'var'
> stop in X
> stop in Y
> run
running ...
stopped in X
var = {
a = '100'
b = '101
c = '<error>'
d = '102
e = '103'
f = '104'
}
> cont
stopped in Y
var = {
a = '105'
b = '106'
c = '<error>'
d = '107'
e = '108'
f = '109'
}
> cont
exited
> run
running ...
stopped in X
var = {
a = '110'
b = '111'
c = '<error>'
d = '112'
e = '113'
f = '114'
}
> cont
stopped in Y
var = {
a = '115'
b = '116'
c = '<error>'
d = '117'
e = '118'
f = '119'
}
> cont
exited
> quit
Goodby
この出力を見て量が多いと思われるかもしれませんが、この例では、プログラムが長大で複雑なためコードをステップスルーまたは追跡することが困難な場合に使用する技術を解説することを主眼としています。
c フィールドの値を表示する箇所で、値が <error> になっていることに注目してください。フィールドに不正なアドレスが含まれていると、このような状況が発生することがあります。