<< 目次を表示 >> ページ位置: プログラムの動作解析 > ビルドとデバッグ > デバッグ > アクションポイント |
アクションポイントやブレークポイントでは、処理を指定して実行できます。デバッグ中に利用し、実行時の処理・動作を変えるためにも利用できます。デバッガがアクションを実行した後は、デバッグ処理が継続して行われます。アクションポイントでは、次の型のローカル変数やオブジェクトのメンバ変数の値を変えることもできます。
ローカル変数の値を処理中に変更することはデバッグの支援にもなります。デバッグ中に、特定の条件になるように強制して処理を実行させたいような場合に便利です。
アクションポイントやブレークポイントでの、ユーザー定義の変数
ユーザー定義変数 (UDV : User Defined Variable) を利用すると以下のことができます。
UDVの文法では、名前には以下のルールがあります。
アクションポイントの処理
アクションポイントでは、setコマンドとgotoコマンドが利用できます。
setコマンドは、変数の値を設定します。1つのアクションポイントには複数のsetコマンドを含めることもできます。gotoコマンドと併用する場合には、gotoコマンドよりも前に記述する必要があります。
setコマンドの文法は以下の通りです。
set LHS = RHS
説明:
set コマンドの例
UDVの例 |
ローカル変数の例 |
set #mychar = 'a' |
set this.m_nCount=0 |
set #mystr = "a string" |
set bSuccess=false |
set #myint = 10 |
|
set #myfloat = 0.5 |
|
set #mytrue = true |
|
gotoコマンド
gotoコマンドは、処理を関数(メソッド)内の別の位置に移動できます。アクションポイントにはgotoコマンドは1つのみ含めることができます。含める場合には、処理の最後に記述しなければなりません。
gotoコマンドの文法は以下の通りです。
goto L
Lは、現在処理中の関数内の行番号を指定します。
gotoコマンドはブレークポイントを使用して動作を実現しているため、コードの実行に若干の遅延が生じます。頻繁に実行されるコード領域ではこの遅延が顕著になるため,jmpコマンドを使用した方がよい場合もあります。
jmpコマンド
jmpコマンドは基本的にはgotoコマンドと同じです。
jmp 125
goto 125
これらのコマンドは、どちらも実行中の行が125行目に変更されます。
しかし、jmp文は内部的にinstrumentationを用いてプログラムの実行移動を指示するのに対し、goto文はブレークポイントを用いて実行移動を指示するため、処理に遅延が生じてしまいます。そのため、特にコードの領域が頻繁に実行される場合には、jmp文の方が処理速度が速くなります。
整数に関する操作
UDVの型が整数の場合には、値を++および--を利用して増加できます。以下は利用例です。AP1からAP3は、異なるアクションポイントです。
AP1: set #myint = nTotalSoFar
AP2: #myint++
AP3: #myint--
時間に関する操作
アクションポイントでは、2つのアクションポイント間での処理時間を計測して表示できます。startTimerコマンドで計測を開始し、printTimerコマンドで経過時間を表示できます。endTimerコマンドで計測を終了します。これ以外の時間に関する操作はありません。
アクションポイントでの条件の指定例
定数値を利用する例
ローカル変数を利用する例
記録に関する指示
実行中の動作の違いを認識・比較するためには、この記録に関する機能が有効です。なお、この機能はEnterprise Architectの動作ログの記録(シーケンス図の自動生成)の機能とは関係はありません。
recStartコマンドは、記録を開始する指示です。recStopコマンドに到達すると、記録を終了します。記録情報を複数保持できません。既に記録情報がある場合にrecStartコマンドに到達すると、既に記録されている内容と比較するモードで動作します。比較モードで動作している場合には、以前の記録されている動作と異なる動作になった場合には、デバッガの実行を停止します。
記録した内容はメモリ内に保持されますが、ファイルを指定して保存できます。その場合の文法は以下のようになります。
recStart filepath
例
recStart c:\mylogs\onclickbutton.dat
recStartコマンドでファイルが指定されていて、そのファイルが既に存在する場合には、そのファイルの内容を読み込んで、比較モードで動作します。
式:
ブレークポイント・アクションポイント・テストポイントの式では、例えばかけ算が足し算に優先するなどの、処理における暗黙の優先度のルールはありません。複雑な式で適切に判定するためには、括弧の利用が必須です。
項目 |
利用方法 |
アクションポイントの UDV の例 |
(#myint=1) AND (#mystr="Germany") |
ローカル変数の例 |
(this.m_nCount > 10) OR (nCount%1) (this.m_nCount > 10) OR (bForce) |
条件式での同一の判断 |
<> 同一でない != 同一でない == 同一 = 同一 (値の代入にもなる点に注意) |
アクションポイントでの割り当て |
= RHSをLHSに割り当て |
条件式での算術演算子 |
/ 割り算 + 足し算 - 引き算 * かけ算 % 剰余 |
条件式での論理演算子 |
AND AND OR OR && AND || OR ^ 排他OR |