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.  コマンドリファレンス

索引

シンボルを検索する

同じ名前が多くの場所で使用されたり、プログラム内の異なる種類の構成要素を参照したりすることがあります。dbx コマンド whereis は、特定の名前を持つすべてのシンボルの完全修飾名 (すなわち位置) のリストを表示します。一方、dbx コマンド which は、特定の名前を式に指定したときに、実際に使用されるシンボルを示します (which コマンド」を参照)。

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

指定シンボルの出現すべてのリストを出力するには、whereis symbol を使用します。ここで、symbol は任意のユーザー定義識別子にすることができます。例:

(dbx) whereis table
forward: `Blocks`block_draw.cc`table
function: `Blocks`block.cc`table::table(char*, int, int, const point&)
class: `Blocks`block.cc`table
class: `Blocks`main.cc`table
variable:       `libc.so.1`hsearch.c`table

この出力には、プログラムが symbol を定義する読み込み可能オブジェクトの名前が、各オブジェクトの構成要素の種類 (クラス、関数、または変数) とともに示されます。

dbx シンボルテーブルの情報は必要に応じて読み取られるため、whereis コマンドは、すでに読み込まれているシンボルの出現についてしか出力しません。デバッグセッションが長くなると、出現のリストは大きくなります (「オブジェクトファイルおよび実行可能ファイル内のデバッグ情報」参照)。

詳細については、whereis コマンド」を参照してください。

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

which コマンドにより、特定の名前を (完全に修飾しないで) 式に指定したときにどのシンボルが使用されるかを前もって調べることができます。例:

(dbx) func
wedge::wedge(char*, int, int, const point&, load_bearing_block*)
(dbx) which draw
`block_draw.cc`wedge::draw(unsigned long)

which コマンドに指定したシンボル名が局所的スコープにない場合、スコープ決定パスで検索が行われます。決定パスで最初に見つかった名前の完全修飾名が示されます。

決定パスに含まれる任意の場所で、同じスコープの該当する symbol が複数見つかった場合、あいまいであることを示すメッセージが表示されます。

(dbx) which fid
More than one identifier `fid’.
Select one of the following:
 0) Cancel
 1) `example`file1.c`fid
 2) `example`file2.c`fid

dbx は、あいまいなシンボル名をリストで示し、多重定義であることを表示します。which コマンドのコンテキストでシンボル名のリストから特定のシンボルを選んでも、dbx またはプログラムの状態には影響しません。どのシンボルを選んでも名前が表示されるだけです。

which コマンドは、ある symbol (この例の場合は block) をコマンド (たとえば、print コマンド) のターゲットにした場合に何が起こるかを前もって示すものです。あいまいな名前を指定して、多重定義が表示された場合は、該当する複数の名前のうちのどれを使用するかがまだ特定されていません。dbx は該当する名前を列挙し、ユーザーがそのうちの 1 つを選択するまで待機します。 dbx は該当する名前を列挙し、ユーザーがそのうちの 1 つを選択するまで待機します。which コマンドの詳細については、which コマンド」を参照してください。

スコープ決定検索パス

式を含むデバッグコマンドを発行すると、式内のシンボルが次の順序で調べられます。dbx はシンボルをコンパイラが現在の表示スコープにあるとして決定します。

  1. 現在の表示スコープを使用する現在の関数のスコープ内 (「表示スコープ」参照)。プログラムが、入れ子になったブロックで停止した場合、そのブロック内で検索したあと、その関数によって宣言されている外側のすべてのブロックのスコープ内で検索します。

  2. C++ の場合のみ: 現在の関数クラスのクラスメンバーとその基底クラス。

  3. C++ の場合のみ: 現在のネームスペース。

  4. 現在の関数のパラメータ。

  5. すぐ外側にあるモジュールで、一般に、現在の関数が含まれているファイル。

  6. この共有ライブラリまたは実行可能ファイル専用に作成されたシンボル。これらのシンボルはリンカースコープを使用して作成できます。

  7. メインプログラム用で、その次に共有ライブラリ用のグローバルシンボル。

  8. 前述のすべてで該当するシンボルが見つからなかった場合、別のファイル内の専用すなわちファイル静的な変数または関数と見なされます。dbxenv による scope_look_aside の設定値によっては、コンパイル単位ごとにファイル静的シンボルを検索することもできます。

dbx はこの検索パスで最初に見つけたシンボルを使用します。変数が見つからなかった場合はエラーを報告します。

スコープ検索規則の緩和

静的シンボルおよび C++ メンバー関数のスコープ検索規則を緩和するには、dbx 環境変数 scope_look_aside を on に設定します。

dbxenv scope_look_aside on

または、「二重逆引用符」接頭辞を使用します。

stop in ``func4            func4 may be static and not in scope

dbx 環境変数 scope_look_aside が on に設定されている場合、dbx は次を検索します。

which コマンドは、dbx がどのシンボルを検索するかを前もって示すものです。あいまいな名前を指定して、多重定義が表示された場合は、該当する複数の名前のうちのどれを使用するかがまだ特定されていません。 dbx は該当する名前を列挙し、ユーザーがそのうちの 1 つを選択するまで待機します。

詳細については、func コマンド」を参照してください。