JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  dbx の概要

2.  dbx の起動

3.  dbx のカスタマイズ

4.  コードの表示とコードへの移動

コードへの移動

ファイルの内容を表示する

関数を表示する

あいまいな関数名をリストから選択する (C++)

複数存在する場合の選択

ソースリストの出力

呼び出しスタックの操作によってコードを表示する

プログラム位置のタイプ

プログラムスコープ

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

表示スコープ

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

表示スコープの変更

スコープ決定演算子を使用してシンボルを特定する

逆引用符演算子

コロンを重ねたスコープ決定演算子 (C++)

ブロックローカル演算子

リンカー名

シンボルを検索する

シンボルの出現を出力する

実際に使用されるシンボルを決定する

スコープ決定検索パス

スコープ検索規則の緩和

変数、メンバー、型、クラスを調べる

変数、メンバー、関数の定義を調べる

型およびクラスの定義を調べる

オブジェクトファイルおよび実行可能ファイル内のデバッグ情報

オブジェクトファイルの読み込み

モジュールについてのデバッグ情報

モジュールのリスト

ソースファイルおよびオブジェクトファイルの検索

5.  プログラムの実行制御

6.  ブレークポイントとトレースの設定

7.  呼び出しスタックの使用

8.  データの評価と表示

9.  実行時検査

10.  修正継続機能 (fix と cont)

11.  マルチスレッドアプリケーションのデバッグ

12.  子プロセスのデバッグ

13.  OpenMP プログラムのデバッグ

14.  シグナルの処理

15.  dbx を使用してプログラムをデバッグする

16.  dbx を使用した Fortran のデバッグ

17.  dbx による Java アプリケーションのデバッグ

18.  機械命令レベルでのデバッグ

19.  dbx の Korn シェル機能

20.  共有ライブラリのデバッグ

A.  プログラム状態の変更

B.  イベント管理

C.  マクロ

D.  コマンドリファレンス

索引

スコープ決定演算子を使用してシンボルを特定する

func または file を使用する場合、「スコープ決定演算子」を使用して、ターゲットとして指定する関数の名前を特定することができます。

dbx では、シンボルを特定するためのスコープ決定演算子として、逆引用符演算子 (`)、C++ 逆引用符演算子 (::)、およびブロックローカル演算子 (: lineno) を使用することができます。これらの演算子は別々に、あるいは同時に使用します。

停止位置以外の部分のコードを表示するためにファイルや関数の名前を特定するだけでなく、スコープ外の変数や式の出力や表示を行なったり、型やクラスの宣言を表示したり (whatis コマンドを使用) する場合にも、シンボルを特定することが必要です。シンボルの特定規則はすべての場合で同じです。この節で示す規則は、あらゆる種類のシンボル名の特定に適用されます。

逆引用符演算子

逆引用符演算子 (`) は、大域スコープの変数あるいは関数を検索するために使用できます。

(dbx) print `item

プログラムでは、同じ関数名を 2 つの異なるファイル (またはコンパイルモジュール) で使用できます。この場合、dbx に対して関数名を特定して、表示する関数を認識させる必要があります。ファイル名に関連して関数名を特定するには、汎用逆引用符 (`) スコープ決定演算子を使用してください。

(dbx) func`file_name`function_name

コロンを重ねたスコープ決定演算子 (C++)

次のような名前を持つ C++ のメンバー関数、トップレベル関数、またはグローバルスコープを伴う変数を特定するときは、コロンを 2 つ重ねた演算子 (::) を使用します。

多重定義された関数名を特定することができます。多重定義された関数名を特定しないと、dbx は多重定義表示リストを自動的に表示して、表示する関数を選択するよう要求します。関数のクラス名がわかっている場合は、それを二重コロンのスコープ決定演算子とともに使用して、名前を特定できます。

(dbx) func class::function_name (args)

たとえば、hand がクラス名で draw が関数名の場合は、次のようになります。

(dbx) func hand::draw

ブロックローカル演算子

ブロックローカル演算子 (:line_number) を使用すると、ネストされたブロック内にある変数を参照することができます。これを行う必要があるのはパラメータまたはメンバー名を隠蔽している局所変数がある場合、またはそれぞれが個別の局所変数を持っている複数のブロックがある場合です。line_number は、対象となる変数に対するブロック内のコードの最初の行番号です。dbx が局所変数をブロックローカル演算子で特定した場合、dbx は最初のコードブロックの行番号を使用しますが、dbx の式ではスコープ内の任意の行番号を使用することができます。

次の例では、ブロックローカル演算子 (:230) が逆引用符演算子と組み合わされています。

(dbx) stop in `animate.o`change_glyph:230`item

次の例は、関数内で複数存在する変数名が、ブロックローカル演算子によって特定され、dbx がその変数の内容を評価している様子を示しています。

(dbx) list 1,$
    1   #include <stddef.h>
    2
    3   int main(int argc, char** argv) {
    4
    5   int i=1;
    6
    7       {
    8            int i=2;
    9            {
   10                   int j=4;
   11                   int i=3;
   12                   printf("hello");
   13            }
   14            printf("world\n");
   15       }
   16       printf("hi\n");
   17   }
   18
(dbx) whereis i
variable: `a.out`t.c`main`i
variable: `a.out`t.c`main:8`i
variable: `a.out`t.`main:10`i
(dbx) stop at 12 ; run
...
(dbx) print i
i = 3
(dbx) which i
`a.out`t.c`main:10`i
(dbx) print `main:7`i
`a.out`t.c`main`i = 1
(dbx) print `main:8`i
`a.out`t.c`main:8`i = 2
(dbx) print `main:10`i
`a.out`t.c`main:10`i = 3
(dbx) print `main:14`i
`a.out`t.c`main:8`i = 2
(dbx) print `main:15`i
`a.out`t.c`main`i = 1

リンカー名

dbx は、(C++ のようにさまざまな名前が混在するため) リンカー名ごとにシンボルを探すよう特別な構文を使用します。シンボル名の接頭辞として # 記号を付け、Korn シェルで $ 記号の前にエスケープ文字 \ を使用します。たとえば、次のようにします。

(dbx) stop in #.mul
(dbx) whatis #\$FEcopyPc
(dbx) print `foo.c`#staticvar