4D v12.4

ソースコードエリア

ホーム

 
4D v12.4
ソースコードエリア

 

ソースコードエリア  


 

 

ソースコードエリアには、トレースされているメソッドのソースコードが表示されます。

メソッドが長すぎてテキストエリアに収まらない場合には、スクロールするとメソッドの他の部分も表示できます。

評価できる式(フィールド、変数、ポインター、配列等)にマウスポインタを移動すると、ツールチップが表示され、オブジェクトや式の現在の値とその宣言型が示されます。

次の図はソースコードエリアを示しています:

ツールチップが表示されているのは、マウスポインターが変数pTableの上に置かれているためで、その表示によると、この変数は[Customers]テーブルへのポインターです。

ソースコードエリア内でテキストの部分を選択できます。この場合、選択されたテキストの上にカーソルを移動すると、選択されたオブジェクトの値をTipsとして表示します:

変数名またはフィールドをクリックすると自動的に選択されます。

Tip: ソースコードエリアで選択した式(評価できる)をカスタムウォッチエリアにコピーすることが出来ます。次の方法のいずれかでコピーすることが出来ます:

  • 単純にドラッグ&ドロップを行なう(選択したテキストを評価エリア内へドラッグ&ドロップする)
  • WindowsではCtrl+D、Macintoshではcommand+Dのキーのコンビネーション。

ソースコードエリアの左マージンにある黄色の矢印(上図を参照してください)は、実行される次の行を表しています。この矢印は、プログラムカウンターと呼ばれます。プログラムカウンターは、常に実行寸前の行を表示します。

デバッグのために、メソッド連鎖のトップにあるメソッド(現在実行されているメソッド)のプログラムカウンターの位置を変更できます。そのためには、黄色の矢印をクリックして目的の行まで上下にドラッグします。

警告: この機能は、十分注意して使用してください。

プログラムカウンターを順方向に移動しても、スキップした行をデバッガーがすばやく実行されるわけではありません。同様に、プログラムカウンターを逆方向に移動しても、既に実行された行の結果をデバッガーが逆方向に実行されるわけではありません。

プログラムカウンターを移動するということは、デバッガーにその位置からのトレースや実行を追跡するように指示するというだけに過ぎません。すべての現在の設定内容、フィールド、変数等には、プログラムカウンターの移動による影響はありません。

プログラムカウンターを移動する例は、次の通りです。例えば、次のようなコードをデバッグすると仮定します:

  ` ...
 If(This condition)
  ` DO SOMETHING
 Else
  ` DO SOMETHING ELSE
 End if
  ` ...

プログラムカウンターは、行If (This condition)に設定されています。1ステップ先に進むと、プログラムカウンターが行DO SOMETHING ELSEに移動していることがわかります。別の分岐にある行を実行しようとしていたため、これは思いがけないことです。この場合には、This conditionという式が次のステップに影響を与えるような演算を実行していなければ、プログラムカウンタを行DO SOMETHINGに戻します。これで、コードの当初目的としていた部分を続けてトレースすることができます。

デバッグの過程において、コードのトレースを一部スキップすることが必要な場合があります。デバッガでは、特定の位置までコードを実行する方法がいくつか提供されます:

  • ステップごとの処理中に、ステップ(呼び出しメソッドもトレース)ボタンではなくステップ(同一メソッドのみ)ボタンをクリックすることができます。プログラムカウンタ行で呼び出されているサブルーチンや関数の実行を避けたい場合には、この方法が役立ちます。
  • 間違ってサブルーチンの処理を始めてしまった場合には、ステップアウト(呼び出し元へ戻る)ボタンをクリックすると、そのサブルーチンを実行した後直接、呼び出し元のメソッドに戻ることができます。
  • TRACEコマンド呼び出しをある位置で指定した場合には、トレースなしボタンをクリックすると、そのTRACEコマンド呼び出しまでの実行を再開始することができます。

次に、プログラムカウンタを行ALL RECORDS([This Table])に設定し、次のようなコードを実行していると想定してみます:

  ` ...
 ALL RECORDS([ThisTable])
 $vrResult:=0
 For($vlRecord;1;Records in selection([ThisTable]))
    $vrResult:=This Function([ThisTable]))
    NEXT RECORD([ThisTable])
 End for
 If($vrResult>=$vrLimitValue)
  ` ...

ここでの目的は、Forループが終了した後で$vrResultの値を評価することです。コードがこの位置まで実行されるにはかなりの処理時間がかかるため、現在の実行をアボートしたくない場合には、TRACEコマンド呼び出しを行If($vrResult..の前に挿入するようにメソッドを編集する必要があります。

ループのステップ処理を実行することも1つの方法ですが、[ThisTable]テーブルに何百件ものレコードが入っている場合には、この処理にかなりの時間を費やすことになります。このような状況では、デバッガブレークポイントを使用できます。ブレークポイントは、ソースコードエリアの左マージンをクリックすると挿入できます。

例題:
次の例では、行If($vrResult...のレベルでソースコードエリアの左マージンをクリックします:

このようにすると、その行にブレークポイントが挿入されます。ブレークポイントは赤色の点で表されます。次に、トレースなしボタンをクリックします。

このようにすると、ブレークポイントで示された行まで、通常の実行が再開されます。ブレークポイントで示された行は実行されずに、トレースモードへ 戻ります。この例では、ループ全体は連続して正常に実行されています。そのため、ブレークポイントに到達した時には、マウスボタンを$vrResultの上に移動して、その値をループの終了地点で評価する必要があります。

プログラムカウンタより下方(後に実行される)の行にブレークポイントを設定し、トレースなしボタンをクリックすると、ブレークポイントまでのメソッドをスキップすることができます。

Note: メソッドエディタで直接ブレークポイントを設定することが出来ます。詳しくはを参照してください。

赤色のブレークポイントは、永続的ブレークポイントです。このブレークポイントは、一度作成するとそのまま残ります。データベースを終了し、後で再び表示すると、ブレークポイントは残っています。

永続的ブレークポイントを取り除く方法は、次の2通りです:

  • 永続的ブレークポイントを使用した後、赤色の点をクリックすると、ブレークポイントは消えます。
  • 永続的ブレークポイントをまだ使用する場合には、これを残しておきたい場合もあります。永続的ブレークポイントを編集すると、一時的に使用不可能にすることができます。編集方法については、の節で説明しています。

 
プロパティ 

プロダクト: 4D
テーマ: デバッグ

 
参照 

ウォッチエリア
カスタムウォッチエリア
デバッガ
ブレークポイント
メソッド連鎖エリア

 
タグ 

debugger source code pane***