デバッガー
デバッガーは、エラーを発見したり、メソッドの実行を監視する必要がある場合に便利です。 デバッガーを使って、コードをステップごとにゆっくり確認して情報を検証することができます。 このようにメソッドをステップごとに確認する処理はトレースと呼ばれます。
デバッガーの呼び出し
デバッガーを開くには、次のような方法があります:
- シンタックスエラーウィンドウ で トレース ボタンをクリックする。
TRACE
コマンドを使用する。- メソッド実行ウィンドウで デバッグ ボタンをクリックする、またはコードエディターで 実行してデバッグ ボタンを選択する。
- メソッド実行中に Alt+Shift+右クリック (Windows) または Ctrl+Option+Cmd+クリック (Macintosh) をおこない、表示されるポップアップウィンドウ内でトレースするプロセスを選択する:
- ランタイムエクスプローラーのプロセスページにてプロセスを選択した後、トレース ボタンをクリックする。
- コードエディターウィンドウ、またはランタイムエクスプローラーのブレークおよびキャッチページでブレークポイントを作成する。
デバッガーウィンドウは、現在トレースしているメソッドまたはクラス関数の名前や、デバッガーが表示される原因となったアクションの情報を表示します。 上のウィンドウの例では、次の情報が表示されています:
- 現在トレースされているメソッドは Clients_BuildLogo メソッドです。
- デバッガーウィンドウが表示されているのは、キャッチコマンドの対象に設定された
C_PICTURE
コマンドへの呼び出しが検出されたためです。
新しいデバッガーウィンドウの表示には、同じセッション内で表示された最後のデバッガーウィンドウと同じ構成 (ウィンドウのサイズと位置、分割線の配置および式評価エリアの内容) を使用します。 複数のユーザープロセスを実行した場合には、それぞれのプロセスを個別にトレースできます。つまり、各プロセスにつき 1つのデバッガーウィンドウを表示できます。
デバッガーウィンドウは、一般的にそのコードが実行されているマシン上に表示されます。 シングルユーザー版アプリケーションの場合、デバッガーは常にアプリケーションを実行しているマシン上に表示されます。 クライアント/サーバー版アプリケーションの場合は:
- ローカルで実行されているコードの場合には、リモート4D 上に表示されます。
- サーバー上で実行されているコード (サーバー上で実行 オプションがつけられたメソッド) の場合には、サーバーマシン上に表示されます。
- ヘッドレスモードで実行中のサーバーでは、デバッガーウィンドウを表示することはできません。この場合はリモートデバッガーを使用する必要があります。 リモートマシンからのデバッグ 参照。
- 運用環境で Qodlyページをデバッグする必要がある場合は、Qodly Studio のデバッガーを 4D Server アプリケーションで有効化する こともできます。
ツールバーボタン
デバッガーウィンド ウの上部にある実行制御ツールバーには、デフォルトショートカットが設定された複数のボタンがあります:
デフォルトのショートカットは、環境設定ダイアログボックスのショートカットページで変更できます。
トレース終了
トレースが停止され、通常のメソッド実行が再開されます。
Shift + F5 または Shift を押しながら トレース終了 ボタンをクリックすると、実行が再開されます。 この操作により、以降のカレントプロセスでの全ての TRACE 呼び出しが無効になります。
次行に進む
現在のメソッド行 (プログラムカウンターと呼ばれる黄色い矢印で示されている行) が実行されます。 その後、デバッガは次の行に移動します。
"次の行に進む" ボタンは、サブルーチンや関数に移動することはなく、現在トレースの対象となっているメソッドのレベルにとどまります。 呼び出されるサブルーチンや関数もトレースしたい場合には、呼び出しメソッドもトレース ボタンを使用します。
リモートデバッグにおいて、メソッドがサーバー上で実行されていた場合には、メソッドの最後の行の実行後にその親メソッドが呼ばれます。 その時、親メソッドがリモート側で実行されていた場合には、このボタンは トレース終了 ボタンと同じように振る舞います。
呼び出しメソッドもトレース
別のメソッド (サブルーチンまたは関数) を呼び出す行が実行される時にこのボタンを使用すると、呼び出されたメソッドがデバッガーウィンドウに表示され、ステップ実行できます。
デバッガーウィンドウの 呼び出し連鎖エリア では、新しく呼び出されたメソッドがカレント (一番上) となります。
別のメソッドを呼び出していない行が実行される場合には、このボタンは 次行に進む ボタンと同じように振る舞います。
呼び出し元に進む
サブルーチンや関数をトレースしている場合にこのボタンをクリックすると、現在トレース中のメソッド全体を実行し、呼び出し元メソッドに戻ることができます。 デバッガーウィンドウは、コール チェーンの一つ前のメソッドに戻ります。 トレース中のメソッドがコールチェーンの最後のメソッドである場合には、デバッガーウィン ドウが閉じられます。
リモートデバッグにおいては、メソッドの最後の行の実行時に、サーバー上でメソッドが実行されている場合には、親メソッドが呼び出されます。 その時、親メソッドがリモート側で実行されていた場合には、このボタンは トレース終了 ボタンと同じように振る舞います。
別プロセスもトレース
新しいプロセスを作成する (New process コマンドを呼び出す) 行を実行する際にこのボタンを使用すると新しいデバッガーウィンドウが表示され、作成されたプロセスでトレースを続行することができます。 新しいプロセスを作成しない行を実行する際には、このボタンは 次行に進む ボタンと同等に動作します。
中断
メソッドは中断され、メソッドの実行を開始する前の状態に戻ります。
- イベントに対して実行しているフォームメソッドまたはオブジェクトメソッドをトレースしている場合には、いずれの場合にも停止され、フォームに戻ります。
- アプリケーションモードから実行しているメソッドをトレースしていた場合には、停止後そのモードに戻ります。
中断&編集
コードエディターウィンドウが開いて、中断&編集 ボタンがクリックされた時点で実行していたメソッドを表示します。
Tip: このボタンは、コードにどのような変更が必要かが明らかであり、メソッドのテストを続行するためにその変更が必要な場合に使用してください。 変更が完了したら、メソッドを再実行できます。
編集
コードエディターウィンドウが開いて、編集ボタンがクリックされた時点で実行していたメソッドを表示します。
このボタンをクリックしてメソッドを編集した場合には、現在の実行は中断されないため、編集内容の反映は次回実行時になります。
Tip: このボタンは、コードに必要な変更内容がわかっている場合で、その変更がコードの残り部分の実行やトレースの妨げにならない場合に使用します。
設定保存
現在のデバッガウィンドウの構成を、デフォルト構成として保存します。 構成には次の内容が含まれます:
- ウィンドウのサイズと 位置
- 分割線の配置および式評価エリアの内容
これらは、プロジェクト内に保存されます。
このアクションはリモートデバッグモードでは利用できません (リモートマシンからのデバッグ 参照)。
ウォッチエリア
ウォッチエリア は実行コントロールツールバーの下、デバッグウィンドウの左上隅に表示されます。 次に例を示します:
このエリアはリモートデバッグモードでは使用できません。
ウォッチエリア には、システム、4D環境、および実行環境について役立つ一般情報が表示されます。
式 欄には、要素や式の名前が表示されます。 値 欄には、要素や式に対応する現在の値が表示されます。 エリア右側の値をクリックすると、その値が変更可能な場合には、要素の値を修正できます。
テーマ、テーマサブリスト (あれば)、テーマ項目は、いつでも カスタムウォッチエリア にドラッグ&ドロップすることができます。
式リスト
ラインオブジェクト
このテーマには、次のような要素や式の値が表示されます:
- 実行されるコードの行 (プログラムカウンターにより、ソースコードエリア 内で黄色の矢印でマークされている行) で使用されている。
- コードの前の行で使用されている。
コードの前の行とは実行直後の行であるため、ラインオブジェクトテーマでは、その行が実行される前または後の現在の行の要素や式が表示されます。 たとえば、次のメソッドを実行した場合を想定します:
TRACE
$a:=1
$b:=$a+1
$c:=$a+$b
-
ソースコードエリアのプログラムカウンターが
$a:=1
の行にセットされた状態で、デバッグウィンドウが開きます。 この時点では ラインオブジェクト テーマには、次のように表示されています:$a 未定義 まだ初期化されていない変数
$a
が表示されているのは、実行の対象となっている行で使用されているためです。 -
次行に進む ボタンをクリックします。 プログラムカウンターは
$b:=$a+1
の行に設定されます。 この時点では ラインオブジェクト テーマには、次のように表示されています:$a 1 $b 未定義 変数
$a
の値は 1 になりました。 まだ初期化されていない変数$b
が表示されているのは、実行の対象となっている行で使用されているためです。 -
次行に進む ボタンをクリックします。 プログラムカウンターは $c:=$a+$b の行に設定されます。 この時点では ラインオブジェクト テーマには、次のように表示されています:
$c 未定義 $a 1 $b 2 変数
$b
の値が 2 になりました。 まだ初期化されていない変数$c
が表示されているのは、実行の対象となっている行で使用されているためです。
変数
このテーマは、次のサブテーマから構成されます:
サブテーマ | 説明 | 値は編集可能? |
---|---|---|
インタープロセス | この時点で使用されているインタープロセス変数のリスト | ◯ |
プロセス | カレントプロセスで使用されているプロセス変数のリスト | ◯ |
ローカル | 現在トレースしているメソッドで使用されているローカル変数のリスト | ◯ |
引数 | メソッドが受け取った引数のリスト | ◯ |
Self | オブジェクトメソッドをトレースしている場合には、現在のオブジェクトへのポインター | × |
他の変数と同様に、配列はそのスコープによって、インタープロセス、プロセス、およびローカルサブテーマに表示されます。 デバッガーは要素ゼロと最初の 100要素を表示します。 値 欄で配列要素の値を変更することは可能ですが、配列のサイズを修正することはできません。
変数の型や内部名を表示するには、右クリックしてコンテキストメニューを開き、型を表示 にチェックを入れます:
このようになります:
カレントフォーム値
このテーマには、カレントフォームに含まれる各動的オブジェクトの名前に加えて、そこに関連付けられている値が表示されます:
リストボックス配列などの一部のオブジェクトは、二つの異なる項目として表示されることがあります (オブジェクト自身の変数と、そのデータソース)。
定数
エクスプローラーウィンドウの定数ページのように、4D が提供する定義済み定数を表示します。 このテーマの式を修正することはできません。
セマフォー
現在設定されているローカルセマフォーのリストを表示します。 各セマフォーの値欄には、自身を設定したプロセスの名前が表示されます。 このテーマの式を修正することはできません。 グローバルセマフォーは表示されません。
プロセス
作業セッションを開始してから起動されたプロセスのリストを表示します。 値欄には、各プロセスの現在の状態 (実行中、一時停止等) および使用した時間が表示されます。 このテーマの式を修正することはできません。
テーブルとフィールド
4Dデータベースのテーブルやフィールドのリストを表示します。 各テーブル項目について、カレントプロセスにおけるカレントセクションのサイズは勿論、ロックされたレコード のナンバーも値欄に表示されます。
各フィールド項目については、カレントレコードのフィールドの値 (ピクチャーと BLOB は除く) が値欄に表示されます。 フィールドの値を修正することはできますが、テーブル情報を修正することはできません。
セット
カレント (トレース中の) プロセスで定義されているセットとインタープロセスセットのリストを表示します。 各セットについて、レコード数とテーブル名が値欄に表示されます。 このテーマの式を修正することはできません。
命名セレクション
カレント (トレース中の) プロセスで定義されている命名セレクションとインタープロセス命名セレクションのリストを表示します。 各命名セレクションについて、レコード数とテーブル名が値欄に表示されます。 このテーマの式を修正することはできません。