Oracle® Developer Studio 12.5: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2016 年 6 月
 
 

プログラムスコープ

スコープとは、変数または関数の可視性の観点で定義されたプログラムのサブセットのことです。あるシンボルの名前が特定の実行地点において可視となる場合、そのシンボルは「スコープ範囲内にある」ことになります。C では、関数にはグローバルまたはファイル固有のスコープが、また変数にはグローバル、ファイル固有、関数、またはブロックのスコープが存在する場合があります。

現在のスコープを反映する変数

次の変数は現在のスレッドまたは LWP の現在のプログラムカウンタを常に反映し、表示スコープを変更するコマンドには影響されません。

$scope

現在のプログラムカウンタのスコープ

$lineno

現在の行番号

$func

現在の関数

$class

$func が所属するクラス

$file

現在のソースファイル

$loadobj

現在のロードオブジェクト

これらの変数は、動作中のプロセス中にしか役立ちません。

表示スコープ

dbx でプログラムのさまざまな要素を検査すると、表示スコープが変更されます。 dbx は、あいまいなシンボルの解決などの目的で、式の評価中に表示スコープを使用します。たとえば、次のコマンドを入力すると、dbx は表示スコープを使用して、どの i に出力するかを決定します。

(dbx) print i

各スレッドまたは LWP は独自の表示スコープを持っています。スレッドを切り替えると、各スレッドはその表示スコープを返します。

表示スコープのコンポーネント

表示スコープの一部のコンポーネントは、次の事前に定義された ksh 変数で可視になります。

$vscope

現在の表示スコープ

$vloadobj

現在の表示ロードオブジェクト

$vfile

現在の表示ファイル

$vlineno

現在の表示行番号

$vclass

$vfunc が属するクラス

$vfunc

現在の表示関数

現在の表示スコープのすべてのコンポーネントは、相互互換性があります。たとえば、関数を含まないファイルを表示する場合、現在の表示ソースファイルが新しいファイル名に更新され、現在の表示関数が NULL に更新されます。

表示スコープの変更

    次のコマンドは表示スコープを変更するもっとも一般的な方法です。

  • func

  • file

  • up

  • down

  • frame number

  • pop

  • list procedure

debug コマンドおよび attach コマンドは、最初の表示スコープを設定します。

ブレークポイントに達すると、dbx によって表示スコープが現在の位置に設定されます。 stack-find-source 環境変数が on に設定されている場合、dbx は、ソースコードを含むスタックフレームを検索してアクティブにしようとします。

現在のスタックフレームを変更するために up コマンド、 down コマンド、 frame コマンド、または pop コマンドを使用すると、dbx は、新しいスタックフレームからのプログラムカウンタに従って表示スコープを設定します。

list コマンドによって使用される行番号位置は、list コマンドを使用した場合にのみ表示スコープを変更します。 表示スコープが設定されると、list コマンド用の行番号位置が表示スコープの最初の行番号に設定されます。続けて list コマンドを使用すると、list コマンド用の現在の行番号位置が更新されますが、現在のファイル内で行をリストしているかぎり表示スコープは変更されません。たとえば、次のコマンドを実行すると、dbxmy-func のソースの先頭を表示し、表示スコープを my-func に変更します。

(dbx) list my-func

次のコマンドを実行すると、dbx は現在のソースファイル内の行 127 を表示しますが、表示スコープは変更しません。

(dbx) list 127

file コマンドまたは func コマンドを使用して現在のファイルまたは現在の関数を変更すると、それに応じて表示スコープが更新されます。