バージョン 6.3.3
 —  デバッガ  —

以前のデバッガの使用

開発サーバーに旧バージョンの Natural がインストールされていると、以前のデバッガが表示されることがあります。詳細については、「全般的な情報」を参照してください。

このドキュメントでは、次のトピックについて説明します。


Natural オブジェクトの準備

Natural デバッガの全機能を使用できるようにするには、以下の Natural プロファイルパラメータを、ダイナミックに指定するか Natural パラメータファイルで指定する必要があります。

SYMGEN を "ON" に設定

オブジェクトがカタログ化または格納され、SYMGEN が "ON" に設定されている場合は、生成プログラムの一部としてシンボルテーブルが生成されます。 このテーブルには、このオブジェクトに対して有効な変数に関連する情報が含まれているため、SYMGEN を指定せずに変数にアクセスすることはできません。ただし、オブジェクトをデバッグすることはできます。

Top of page

デバッガの開始

デバッガは、格納またはカタログされた Natural プログラムおよびダイアログについてのみ使用できます。

Start of instruction setデバッガを開始するには

タイトルバーに以下のいずれかが表示されます。

リモートデバッガが Windows オペレーティングシステムでアクティブになると、タイトルバーに "Debugging remote Natural client (\\nodename::username::process-id)" と表示されます。nodename は Natural が実行されているコンピュータの名前、username は Natural ユーザー名、process-id は Natural プロセス ID です。

デバッガウィンドウには子ウィンドウがあり、デバッグ対象として指定されたオブジェクトのソースのリストが表示されます。

このオブジェクトソースの他に、制御バーを使用して以下の情報を表示できます。

制御バー 機能
ブレイクポイントとウォッチポイント この制御バーには、2 つのタブエリアがあります。 1 つにブレイクポイント、もう 1 つにウォッチポイントが表示されます。
変数 この制御バーには、有効な変数とその実際の内容が表示されます。 変数は、カテゴリ[Locals]、[Globals]、[Systems]、[AIVs]、および[Contexts]にわかれて表示されます。
ウォッチ変数 この制御バーには、変数制御バーのカテゴリからユーザーが選択した変数が表示されます。

制御バーの詳細については、このセクションで後述します。

Top of page

デバッガの終了

デバッガは、[Exit](次を参照)または該当するツールバーボタンを使用して、アプリケーションのどこからでも終了できます。

デバッガは、アプリケーションがエラーなしで終了した場合も終了します。その場合は、トレースカーソルは最後に実行されたソースコード行に移動します。

エラーがあった場合は、該当するソースがソースウィンドウに表示され、トレースカーソルはエラーが発生した行に移動します。 メッセージウィンドウに、適切なエラーメッセージと、デバッグセッションを継続するか終了するかの選択肢が表示されます。 以下の場合は、デバッグセッションを継続すると便利です。

デバッガを終了すると、ブレイクポイント、ウォッチポイント、およびウォッチ変数の設定は、ウィンドウやツールバーの設定とともに自動的に保存されます。 これらすべての設定は、デバッガを次回呼び出したときに復元されます。

注意:
リモート開発において、リモートシステム上のデバッガを終了した場合は、プログラムの実行は続行されますが、プログラム実行に対するデバッグ制御は停止します。

[Exit]コマンド

[Exit]は、デバッグセッションを終了し、制御を Natural に戻します。 [Exit]コマンドは、デバッガの 5 つの主な機能それぞれでメインウィンドウの先頭のメニューにあります。

Top of page

デバッガの操作

デバッガのソースウィンドウなどの主な機能の詳細を説明する前に、このセクションでデバッガの全般的な情報について説明します。

ウィンドウとメニュー

デバッガには、さまざまなウィンドウ、制御バー、ツールバー、およびメニューがあります。

頻繁に使用するメニューコマンドは、対応するツールバーのツールバーボタンからも使用できます。

メニューの代わりに、ツールバーボタンやショートカットキーを使用できます。

Natural 本体とは以下の点が異なります。

ツールバーボタン

ツールバーを使用すると、頻繁に使用するコマンドに簡単にアクセスできます。 コマンドの簡単な説明を表示するには、目的のボタンにマウスポインタを合わせます。 説明が、デバッガのメインウィンドウ下部のステータスバーに表示されます。 現在使用できないコマンドに対応するボタンは無効になります。

ショートカットキー

デバッガコマンドを実行するもう 1 つの方法は、対応するショートカットをキーボードから入力することです。 デフォルトでは、以下のショートカットが定義されています。

メニュー ショートカット 機能
File Ctrl + O Open
Edit Ctrl + F Find
F3 Find Next
Debug F4 Close
F5 Go
F6 Step Over
F7 Step In
Ctrl + F7 Step Out
Ctrl + F6 Run To Cursor
Alt + * Show Trace Position
F9 Toggle Breakpoint
Variables Ctrl + M Modify Variable
Ctrl + D Display Variable
Ctrl + V Add to Watchvariables
Ctrl + W Add to Watchpoints

ウォッチポイントとブレイクポイント

プログラムには、ウォッチポイントブレイクポイントという 2 種類のエントリをデバッグ目的で定義できます。 各ウォッチポイントまたはブレイクポイントは、対応する制御バーに表示されます。 各ウォッチポイントには、対象となる変数の名前に対応する名前が割り当てられます。

各ウォッチポイントまたはブレイクポイントは、対応するチェックボックスを使用して、デバッグセッション中にいつでも有効または無効にできます。

各ウォッチポイントまたはブレイクポイントにはイベントカウントがあり、デバッグエントリが通過するたびにカウントが増えます。 ただし、デバッグエントリの実行回数は 2 通りの方法で制限できます。

  1. ウォッチポイントまたはブレイクポイントが実行される前のスキップ回数を指定できます。 その後、イベントカウントが指定されているスキップの数より多くなるまで、デバッグエントリは無視されます。

  2. 実行回数の上限を指定して、イベントカウントが指定の実行回数を上回ったら直ちにウォッチポイントまたはブレイクポイントが無視されるようにすることができます。

デバッグセッションの再スタート

デバッグセッションを再スタートすると、デバッガの位置がアプリケーションの先頭に戻り、現在のすべての設定(ウォッチポイントやブレイクポイントなど)は保持され、すべてのカウンタと呼び出し履歴が初期化されます。 このため、デバッグに関連する設定を指定せずにアプリケーションを再実行する場合は、デバッグセッションの再起動が役に立ちます。 デバッグセッションは、[Restart]コマンドまたは該当するツールバーアイコンをクリックして、アプリケーションのどこからでも再スタートできます。 [Restart]コマンドは、[Debug]メニューにあります。

注意:
デバッグセッションをリモート環境で実行している場合は、[Restart]コマンドを使用できません。DCOM または RPC サーバーをデバッグしている場合に[Restart]コマンドを使用すると、呼び出されているメソッドまたはサブプログラムが再スタートします。

Top of page

デバッガソースウィンドウ

呼び出されたデバッガは、指定された Natural オブジェクトの制御を受け取り、対応するソースをソースウィンドウに表示します。 表示するソースがない場合は、ウィンドウには何も表示されません。 トレースカーソルは、最初に実行可能なソースコード行に移動します。

ユーザーが新しいオブジェクトを開いた場合、または現在アクティブな別のオブジェクトでウォッチポイントまたはブレイクポイントがヒットした場合は、新しいソースウィンドウが開き、新しいオブジェクトのソースが表示されます。

以下では次のトピックについて説明します。

[Debug]メニュー

以下の[Debug]メニューコマンドは、ソースウィンドウに関連して使用できます。

ステップイン(Step Into)

[Step Into]コマンドを選択すると、次のプログラムステップが実行され、トレースカーソルは対応するソースコード行に移動します。

このソースコード行が呼び出された場合、または他の Natural オブジェクトが含まれていた場合は、デバッガはこのオブジェクトにステップインします。

ステップオーバー(Step Over)

[Step Over]コマンドを選択すると、次のプログラムステップが実行され、トレースカーソルは対応するソースコード行に移動します。 デバッガは、呼び出されたか含まれている Natural オブジェクトをステップオーバーしますが、このオブジェクトにウォッチポイントまたはブレイクポイントが含まれていると停止します。

ステップアウト(Step Out)

[Step Out]コマンドを選択すると、デバッガは前のプログラムレベルに戻りますが、前のレベルに達する前にウォッチポイントやブレイクポイントがあった場合は停止します。

アニメーションステップイン(Animated Step Into)

[Animated Step Into]コマンドを選択すると、そのプログラムの終わりまで自動的にステップ実行されます。 Natural オブジェクトが呼び出されたか含まれていた場合は、デバッガはステップインします。

アニメーションステップオーバー(Animated Step Over)

[Animated Step Over]コマンドを選択すると、そのプログラムの終わりまで自動的にステップ実行されます。 デバッガは、呼び出されたか含まれている Natural オブジェクトをステップオーバーします。ウォッチポイントまたはブレイクポイントが設定されている場合は、対応するステートメント行にジャンプし、アニメーションを続行します。

実行(Go)

[Go]コマンドを選択すると、プログラムは次の有効なウォッチポイントまたはブレイクポイントまで実行され、トレースカーソルは対応するソースコード行に移動します。

次のイベントまで実行(Go Until Next Event)

[Go Until Next Event]コマンドを選択すると、非イベントドリブンアプリケーションの[Go]コマンドと同じ操作が実行されます。 ただし、イベントドリブンアプリケーションでは、オブジェクトは次のイベントがアプリケーションに送信されるまで実行されます。次のイベントが送信される前に有効なウォッチポイントまたはブレイクポイントがあった場合は停止します。

カーソル行まで実行(Run to Cursor)

[Run to Cursor]コマンドを選択すると、プログラムは現在のカーソル位置のソース行に達するまで実行されます。

トレース位置の表示(Show Trace Position)

[Show Trace Position]コマンドを選択すると、現在のトレースカーソルが表示されます。

ブレイクポイント ON/OFF(Toggle Breakpoint)

[Toggle Breakpoint]コマンドを選択すると、現在のトレース位置のブレイクポイントがブレイクポイント制御バーに追加されます。 このカーソル位置にブレイクポイントがすでに存在している場合は、そのブレイクポイントがブレイクポイント制御バーから削除されます。

コール(Calls)

[Calls]サブメニューは、コピーコードやインラインサブルーチンを含む、最近呼び出された Natural オブジェクトのリスト(履歴)を表示します。 最高で 20 のオブジェクトが表示されます。直前に呼び出されたオブジェクトはリストの先頭に表示されます。

オブジェクトリストには以下の情報が表示されます。

デバッガのメインウィンドウ下部のステータスバーには、呼び出されたオブジェクトに関する以下の追加情報が表示されます。

[Variables]メニュー

[Variables]メニューは以下の操作に使用します。

ダイアログボックス

[Display][Modify][Add Watch]、または[Add Watchpoint]コマンドを選択すると、ダイアログボックスが開き、現在のデバッグコンテキストで有効なすべてのローカル変数、グローバル変数、AIV、またはシステム変数のリストが表示されます。 このダイアログボックスには以下のコントロールがあります。

変数の選択

ダイアログボックスの変数リストで選択した変数は、対応する[Variable]テキストボックスに表示されます。

ダイアログボックスの変数リストで変数を選択すると、別のダイアログボックスが表示されます([Watch]コマンドの場合を除く)。

配列または変数グループを選択したときの動作は以下のとおりです。

変数は、ソースウィンドウで直接マークし、[Display][Modify][Add Watch]、または[Add Watchpoint]コマンドを選択することでも、選択できます。 これにより、対応するダイアログボックスの[Variable]テキストボックスに、マークしたソースコード部分がそのまま表示され、そこで変更できます。

ソースウィンドウでのテキストのマーク

ソースウィンドウでは、マウスまたはキーボードを使用して、変数や文字列を選択対象としてマークできます。

マウスを使用してテキストをマークする場合は、マウスポインタを選択対象の先頭の文字に置き、ポインタを対象の最後の文字までドラッグし、マウスボタンを放します。 選択をキャンセルするには、ドキュメント内の任意の場所をクリックします。

キーボードを使用してテキストをマークする場合は、カーソル移動キーを使用します。 矢印キーを使用してカーソルを先頭の文字に置き、Shift キーを押しながら以下のキーを使用してテキストを選択します。

表示(Display)

このコマンドを使用すると、変数をダイアログボックスのリストから選択し、現在の内容を別のダイアログボックスの[Display Variable]に表示できます。このダイアログボックスでは、変数値の英数字表現とバイナリ表現を切り替えることができます。

配列、ハンドル変数、または変数グループを選択した場合は、各要素とその値は別のダイアログボックスに表示されます。 配列の場合は、変数インデックス式はすべて評価されます。

要素リストは、[Expand/Contract]ボタンを使用して展開または収縮できます。 リストの配列、グループ、またはダイアログエレメントの数が表示の上限を超えた場合は、"More" 行が表示されます。これを使用して、隠れているオブジェクトを表示できます。 また、[Expand]コマンドを使用することもできます。

変数、変数の配列、または変数のグループは、ソースウィンドウで左マウスボタンを使用して直接選択することでも、[Display Variable]ダイアログボックスに表示できます。

変更(Modify)

このコマンドを使用すると、変数をダイアログボックスのリストから選択し、その現在の値を別のダイアログボックスの[Modify Variable]に表示できます。このダイアログボックスでは、値を変更できます。

システム変数を変更する場合は、最初のダイアログボックスには変更可能なシステム変数のみ表示されます。

配列を変更する場合は、別のダイアログボックスには名前のみが表示され、値は表示されません。 入力した値は、すべての配列要素に対して有効になります。

変数のグループを選択して変更することはできません。

クイックウォッチ(Quick Watch)

このコマンドを選択すると、ダイアログボックスが開き、現在のカーソル位置にある変数の内容が表示されます。

ウォッチ(Add Watch)

このコマンドを使用すると、ダイアログボックスのリストから、変数、変数の配列、または変数のグループを選択して、ウォッチ変数制御バーに追加できます。

ウォッチポイントの追加(Add Watchpoint)

このコマンドを使用すると、ダイアログボックスのリストから単一の変数とグループまたは配列の各要素を選択し、ウォッチポイントを別のダイアログボックスの[Set Watchpoint]で定義できます。変数の配列やグループを選択することはできません。

この[Set Watchpoint]ダイアログボックスには、ウォッチポイント名(選択した変数の名前に対応)、行参照(該当する場合)、および対応する Natural オブジェクトおよびライブラリの名前が表示されます。

注意:
システム変数では、対応するウォッチポイントが特定のライブラリおよびオブジェクトに添付されません。このため、オブジェクトとライブラリの名前は常に SYSTEM です。

ウォッチポイントを定義するには、該当するダイアログボックスで以下の項目を指定します。

[File]メニュー

以下の[File]メニューコマンドは、ソースウィンドウに関連して使用できます。

開く(Open)

[Open]コマンドを使用すると、ソースウィンドウに追加ロードするソースプログラムを指定できます。 [Open Source]ダイアログボックスが開き、プログラム名を指定できます。また、プログラムが現在のライブラリに含まれていない場合(デフォルト)は適切なライブラリ名も指定できます。

[Open Source]ダイアログボックスに指定する文字列は、ソースウィンドウでマークし、[Open]コマンドを選択することでも選択できます。

閉じる(Close)

[Close]コマンドは、現在アクティブなソースウィンドウを閉じます。 閉じようとしているソースウィンドウにトレースバーが存在する場合は、ウィンドウはアイコン化されます。

終了(Exit)

[Exit]コマンドは、デバッガを終了し、現在のプログラム実行を終了します。

[Edit]メニュー

以下の[Edit]メニューコマンドは、ソースウィンドウに関連して使用できます。

検索(Find)

[Find]コマンドを使用すると、アクティブなウィンドウ内を上方向または下方向に検索して、指定した単語や文字列を見つけることができます。

[Find]ダイアログボックスが開くので、検索するテキストを[Find]テキストボックスに入力します。 また、[Match Upper/Lower Case]オプションや[Whole Words Only]オプションをオンまたはオフにすることもできます。

指定したテキストが見つかった場合は、最初の出現が強調表示(選択)されます。見つからなかった場合は、メッセージが表示されます。

[Match Upper/Lower Case]オプションでは、大文字と小文字を一致させて検索するか(オン)、または大文字と小文字を区別せずに検索するか(オフ)を指定します。

[Whole Words Only]オプションでは、完全に一致する単語のみ検索し、文字列の一部である場合を対象外にするか(オン)、または完全に一致するか文字列の一部かに関係なく、指定したテキストの出現をすべて検索するか(オフ)を指定します。

検索方向は、[Up]ボタンを選択するとテキストの先頭に向かって上方向に検索され、[Down]ボタンを選択するとテキストの末尾に向かって下方向に検索されます。デフォルトは[Down]です。

テキストの途中から検索を開始し、指定したテキストが見つからなかった場合は、ダイアログボックスが表示されます。 [Yes]を選択すると、テキストの先頭(または末尾)から検索が続行されます。[No]を選択すると検索が終了します。

[Find]テキストボックスに指定する文字列をソースウィンドウで直接マークし、[Find]コマンドを選択することでも、文字列を選択できます。

次を検索(Find Next)

このコマンドを使用すると、直前の検索操作を繰り返して、[Find]コマンドで指定したテキストの次の出現を検索できます。

Top of page

ウォッチ変数制御バー

ウォッチ変数制御バーの主な目的は、前に選択した変数を表示し、その内容を注意して継続的に観察できるようにすることです。

コンテキストメニューがあり、制御バー全体を対象とするコマンドと各ウォッチ変数を対象とするコマンドのいずれかを使用できます。

コンテキストメニューを開くには、制御バーキャプションまたは特定のウォッチ変数を右クリックします。

Top of page

変数制御バー

変数制御バーには、プログラム実行の現在の状態で使用できるすべての変数が表示されます。 どの変数もいずれかのカテゴリに属します。 カテゴリは、[Locals][Globals][Systems][AIVs]、および[Contexts]です。 カテゴリを切り替えるには、制御バーの下部で該当するタブを選択します。 内容を変更するには、目的の変数の内容フィールドを選択します。 一部のシステム変数は読み取り専用で、変更できません。

変数制御バーにはコンテキストメニューがあり、制御バー全体を対象とするコマンドと各変数を対象とするコマンドのいずれかを使用できます。

コンテキストメニューを開くには、制御バーキャプションまたは特定の変数を右クリックします。

Top of page

ウォッチポイントとブレイクポイント制御バー

ウォッチポイントとブレイクポイント制御バーは、ウォッチポイントやブレイクポイントの追加および管理に使用します。 ウォッチポイントとブレイクポイントを切り替えるには、制御バーの下部で該当するタブを選択します。

ウォッチポイント

ウォッチポイントを使用すると、エラーを含むオブジェクトによる Natural 変数の "無効な" 変更を迅速に検出できます。

デフォルトでは、ウォッチポイントを使用して、変数の内容が変更されたときに Natural オブジェクトの実行を中断するようデバッガに指示します。 ただし、ウォッチポイントの設定時にウォッチポイント演算子を使用して変数に特定の値を指定すると、条件が設定され、その条件が真の場合のみウォッチポイントが有効になります。

変数が変更されたと見なされるのは、変数の現在の値が、前回ウォッチポイントがトリガされたときに記録された値または初期値と異なる場合です。

ウォッチポイントを一時的に無効にするには、対応するウォッチポイントエントリのチェックボックスをオフにします。

制御バーのウォッチポイントタブにはコンテキストメニューがあり、タブ全体を対象とするコマンドと各ウォッチポイントを対象とするコマンドのいずれかを使用できます。

コンテキストメニューを開くには、タブのキャプションまたは特定のウォッチポイントを右クリックします。

ウォッチポイントの追加

新しいウォッチポイントを追加するには、[Variables]メニューの[Add Watchpoint]コマンドを選択するか、[Watchvariables]タブのコンテキストメニューの[Add]コマンドを選択します。

[Add Watchpoint]ダイアログボックスが開き、使用可能な変数のリストから、変数、配列、または個別のグループ要素を選択できます。 [OK]ボタンをクリックしてこのダイアログボックスを閉じると、[Set Watchpoint]ダイアログボックスが開き、このウォッチポイントの条件を指定できます。

注意:
システム変数では、対応するウォッチポイントが特定のライブラリおよびオブジェクトに添付されません。このため、オブジェクトとライブラリの名前は常に SYSTEM です。

[Set Watchpoint]ダイアログボックス

[Set Watchpoint]ダイアログボックスには、ウォッチポイント名(選択した変数の名前に対応)、行参照/コンテキスト ID(該当する場合)、および対応する Natural オブジェクトおよびライブラリの名前が表示されます。

注意:
システム変数では、対応するウォッチポイントが特定のライブラリおよびオブジェクトに添付されません。このため、オブジェクトとライブラリの名前は常に SYSTEM です。

ウォッチポイントを定義するには、該当するダイアログボックスで以下の項目を指定します。

適切な値とウォッチポイント演算子を指定できます。演算子と値(条件)の指定がない場合は、デフォルトの設定(MOD)が適用されます(ウォッチポイント演算子については、以下を参照)。

ウォッチポイントは、[OK]ボタンをクリックするか Enter キーを押すと設定されます。 [Cancel]ボタンをクリックするか Esc キーを押すと、ウォッチポイントは設定されません。

指定したウォッチポイントは、明示的に削除するまで残ります。

ウォッチポイント演算子

ウォッチポイント演算子の設定にはオプションボタンを使用します。使用できるウォッチポイント演算子は以下のとおりです。

演算子 意味 説明
MOD 変更 ウォッチポイントは、変数の内容が変更されるたびに有効になります。 デフォルトです。
LT より小さい ウォッチポイントは、変数の現在値が指定値より小さい場合のみ有効になります。
LE 以下 ウォッチポイントは、変数の現在値が指定値以下の場合のみ有効になります。
GT より大きい ウォッチポイントは、変数の現在値が指定値より大きい場合のみ有効になります。
GE 以上 ウォッチポイントは、変数の現在値が指定値以上の場合のみ有効になります。
EQ 等しい ウォッチポイントは、変数の現在値が指定値と等しい場合のみ有効になります。
NE 等しくない ウォッチポイントは、変数の現在値が指定値と等しくない場合のみ有効になります。

ブレイクポイント

ブレイクポイントとは、Natural オブジェクトの実行中に制御がユーザーに返されるポイントです。

ブレイクポイントを一時的に無効にするには、対応するブレイクポイントエントリのチェックボックスをオフにします。

制御バーのブレイクポイントタブにはコンテキストメニューがあり、タブ全体を対象とするコマンドと各ブレイクポイントを対象とするコマンドのいずれかを使用できます。

コンテキストメニューを開くには、タブのキャプションまたは特定のブレイクポイントを右クリックします。

ブレイクポイントの追加

新しいブレイクポイントを定義するには、[Add]コマンドを使用します。 [Add Breakpoint]ダイアログボックスが開くので、以下の項目を該当するボックスに入力して、ブレイクポイントを定義します。

[Begin]では、指定したオブジェクトの最初の実行可能コード行にブレイクポイントを設定します。[End]では、指定したオブジェクトの最後の実行可能コード行にブレイクポイントを設定します。

ブレイクポイントは、[OK]ボタンをクリックするか Enter キーを押すと設定されます。 [Cancel]ボタンをクリックするか Esc キーを押すと、ブレイクポイントは設定されません。

ブレイクポイントは、適切なステートメント行を右ダブルクリックすることによって、ソースウィンドウに現在表示されているプログラムに直接設定することもできます。 この方法では、ブレイクポイントはすべてのデフォルト値および対応するソースコード行番号で定義されます。 このブレイクポイントは、対応する機能を使用して表示または変更できます。

ブレイクポイントはコメント行に設定することはできません。また、1 つのステートメントが複数行にわたる場合、先頭行以外にブレイクポイントを設定することはできません。

定義したブレイクポイントは、明示的に削除するまで残ります。

Top of page