dbx コマンドによるデバッグ

ブレークポイントフィルタを設定する

dbx では、イベント管理コマンドのほとんどで (省略可能な) イベントフィルタの修飾文も利用することができます。最も単純なフィルタは次のいずれかの時点で、dbx に対してある特定の条件をテストするように指示します。

このフィルタ条件が真 (非 0) と評価されると、イベントコマンドが適用されます。条件が偽 (0) と評価されると、dbx はイベントが発生しなかったかのようにプログラムの実行を続けます。

条件つきフィルタを含む行または関数にブレークポイントを設定するためには、-if condition 指示子文を stop コマンドまたは trace コマンドの終わりに追加します。

condition には、任意の有効な式を指定できます。コマンドの入力時に有効だった言語で書かれた、ブール値または整数値を返す関数呼び出しも有効な式に含まれます。


注 -

inat など位置にもとづくブレークポイントでは、スコープはブレークポイント位置のスコープになります。それ以外の場合、イベントではなくエントリ発生時のスコープになります。スコープを正確に指定する構文を使用しなければならないことがあります。


次の 2 つのフィルタは異なります。


stop in foo -if a>5
stop cond a>5

前者は foo にブレークポイントが設定され、条件を検査します。後者は自動的に条件を検査します。

最初のうちは、条件つきイベントコマンド (watch タイプのコマンド) の設定とフィルタの使用とを混乱してしまうかもしれません。watch タイプのコマンドは、各行の実行前の前提条件の検査に用いられます (watch のスコープ内で)。しかし、このような条件つきブレークポイントに対してもフィルタを利用することができます。

次に具体的な例を示します。


(dbx) stop modify &speed -if speed==fast_enough

このコマンドは、変数 speed を監視するように dbx に指令します。speed に書き込みが行われると、-if フィルタが有効になります。dbxspeed の新しい値が fast_enough と等しいかどうかチェックします。等しくない場合、プログラムは実行を継続し、stop を「無視」します。

dbx 構文では、フィルタはブレークの「事後」、構文の最後で [-if condition] 文の形式で指定されます。


stop in function [-if condition]