Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

データ変更イベント指定

メモリーアドレスへのアクセスまたは変更が必要なイベントのイベント指定の例を示します。

access mode address-expression [, byte-size-expression ]

address-expression で指定されたメモリーがアクセスされたとき。

mode はメモリーのアクセス方法を指定します。次の文字 (複数可) で構成されます。

r

指定したアドレスのメモリーが読み取られたことを示します。

w

メモリーへの書き込みが実行されたことを示します。

x

メモリーが実行されたことを示します。

さらに mode には、次のいずれかの文字も指定することができます。

a

アクセス後にプロセスを停止します (デフォルト)。

b

アクセス前にプロセスを停止します。

いずれの場合も、プログラムカウンタは副作用アクションの前後で違反している命令をポイントします。「前」と「後」は副作用を指しています。

address-expression は、その評価によりアドレスを生成できる任意の式です。シンボル式を使用すると、監視される領域のサイズが自動的に推定されます。このサイズは、byte-size-expression を指定することにより、上書されます。シンボルを使用しない、型を持たないアドレス式を使用することもできますが、その場合はサイズを指定する必要があります。次に例を示します。


stop access w 0x5678, sizeof(Complex)

access コマンドには、2 つの一致する範囲が重複しない、という制限があります。


注 –

access イベント仕様は、modify イベント仕様の代替です。


change variable

variable の値は変更されました。change イベントは、次のコードとほとんど同じ働きをします。


when step { if [ $last_value !=$[variable]] 
            then
                 stop
            else
                 last_value=$[variable]
            fi
          }

このイベントはシングルステップを使用して実装されます。パフォーマンス速度を上げるには、access イベント (access mode address-expression [, byte-size-expression ]参照) を使用します。

最初に variable がチェックされると、変更が検出されない場合でも 1 つのイベントが発生します。この最初のイベントによって variable の最初の値にアクセスできるようになります。あとから検出された variable の値への変更によって別のイベントが発生します。

cond condition-expression

condition-expression によって示される条件が真と評価されます。condition-expression には任意の式を使用できますが、整数型に評価されなければなりません。cond イベントは、次のコードとほとんど同じ働きをします。

stop step -if conditional_expression