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

印刷ビューの終了

更新: 2016 年 6 月
 
 

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

最適な結果を得るには、ソースファイルを -g オプションを使用してコンパイルすることにより、プログラムをよりデバッグしやすくします。-g オプションを指定すると、コンパイラにより、デバッグ情報がプログラムのコードやデータとともにスタブまたは DWARF 形式でオブジェクトファイルに記録されます。

dbx は、必要に応じて、各オブジェクトファイル (モジュール) のデバッグ情報を解析してロードします。module コマンドを使用すると、いずれか特定のモジュール、またはすべてのモジュールのデバッグ情報をロードするよう dbx に要求できます。ソースファイルおよびオブジェクトファイルの検索も参照してください。

オブジェクトファイルのロード

オブジェクト (.o) ファイルがリンクされるとき、リンカーはオプションで、結果のロードオブジェクトにサマリー情報のみを格納できます。このサマリー情報は実行時に dbx で使用して、実行可能ファイルからではなくオブジェクトファイル自体から残りのデバッグ情報を読み込むことができます。作成される実行可能ファイルのディスク占有領域は小さくなりますが、dbx の実行時にそのオブジェクトファイルが使用可能である必要があります。

この要件は、オブジェクトファイルを -xs オプションでコンパイルして、これらのオブジェクトファイルのすべてのデバッグ情報をリンク時に実行可能ファイルにまとめることによってオーバーライドできます。

オブジェクトファイルとともにアーカイブライブラリ (.a ファイル) を作成し、そのアーカイブライブラリをプログラムで使用した場合、dbx は、必要に応じてアーカイブライブラリからオブジェクトファイルを抽出します。ここではオリジナルのオブジェクトファイルは必要ありません。

ただし、すべてのデバッグ情報を実行可能ファイルに入れると、追加のディスク容量が必要になります。デバッグ情報が実行時にプロセスイメージにロードされないため、プログラムの実行が遅くなることはありません。

スタブ型式を使用した際のデフォルト動作では、コンパイラはサマリー情報のみを実行可能ファイルに入力します。

オブジェクトファイルは、–xs オプションを使用して DWARF で作成できます。詳細については、インデックス DWARF (-xs[={yes|no}])を参照してください。


注 -  DWARF 形式は、同じ情報をスタブ形式で記録するよりも大幅にサイズが小さくなります。ただし、すべての情報が実行可能ファイルにコピーされるため、DWARF 情報はスタブ情報よりもサイズが大きく見えてしまいます。

スタブのインデックスの詳細については、install-dir/solarisstudio12.4/READMEs/stabs.pdf のパスにあるスタブのインタフェースに関するガイドを参照してください。

デバッグをサポートするためのコンパイラおよびリンカーオプション

コンパイラおよびリンカーオプションにより、ユーザーはデバッグ情報をより自由に生成したり、使用したりできるようになります。コンパイラは、インデックススタブに似た DWARF のインデックスを生成します。このインデックスは常に存在し、これによって dbx の起動が速くなるほか、DWARF でのデバッグではその他の項目も改善されます。

次の図は、デバッグ情報のさまざまな種類と場所を示しています。ここでは、特にデバッグデータがどこに存在するかを強調しています。

図 1  デバッグ情報のフロー

image:図は、デバッグデータの場所への影響を選択するためのオプションを示しています。

インデックス DWARF (–xs[={yes|no}])

DWARF は、デフォルトでは実行可能ファイルにロードされます。新しいインデックスにより、–xs=no オプションで DWARF をオブジェクトファイル内に残すことが可能になります。これにより、実行可能ファイルのサイズがより小さく、リンクがより高速になります。デバッグするには、これらのオブジェクトファイルを保持しておく必要があります。これは、スタブの動作と同様です。

個別のデバッグファイル (–z ancillary[=outfile])

Oracle Solaris 11.1 リンカーは、実行可能ファイルの構築中に、デバッグ情報を個別の補助ファイルに送信できます。個別のデバッグファイルは、すべてのデバッグ情報を移動、インストール、またはアーカイブする必要がある環境で役立ちます。実行可能ファイルは個別に動作できますが、その個別のデバッグファイルのコピーを使用して複数のユーザーがデバッグすることもできます。

dbx は、デバッグ情報を個別のファイルに抽出するための GNU ユーティリティー objcopy の使用を引き続きサポートしていますが、Oracle Solaris リンカーの使用には、objcopy に比べて次の利点があります。

  • 個別のデバッグファイルはリンクの副産物として生成される

  • 大きすぎて 1 つのファイルとしてリンクできなかったプログラムは 2 つのファイルとしてリンクされる

詳細については、補助ファイル (Oracle Solaris のみ)を参照してください。

デバッグ情報の最小化

–g1 コンパイラオプションは、配備されるアプリケーションのデバッグ可能性を最小限に抑えることを目的にしています。このオプションでアプリケーションをコンパイルすると、ファイルと行番号のほか、事後デバッグ中に重要であると見なされた単純なパラメータ情報が生成されます。詳細については、コンパイラのマニュアルページおよびコンパイラのユーザーガイドを参照してください。

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

module コマンドおよびそのオプションは、デバッグセッション中、プログラムモジュールを追跡するのに役立ちます。 module コマンドを使用して、1 つまたはすべてのモジュールのデバッグ情報を読み込みます。通常 dbx は、必要に応じて、自動的にゆっくりとモジュールについてのデバッグ情報を読み込みます。

1 つのモジュールのデバッグ情報を読み込むには、次のように入力します。

(dbx) module [-f] [-q] name

すべてのモジュールのデバッグ情報を読み込むには、次のように入力します。

(dbx) module [-f] [-q] -a

ここでは:

-a

すべてのモジュールを指定します。

-f

ファイルが実行可能より新しい場合でも、デバッグ情報を強制的に読み込みます。

-q

静止モードを指定します。

-v

言語、ファイル名などを出力する冗長モードを指定します。これはデフォルト値です。

現在のモジュールの名前を出力するには、次のように入力します。

(dbx) module

モジュールの一覧表示

modules コマンドは、モジュール名を一覧表示することによってモジュールを追跡するのに役立ちます。

すでに dbx に読み取られたデバッグ情報を含むモジュールの名前を一覧表示するには、次のように入力します。

(dbx) modules [-v] -read

デバッグ情報を含むかどうかには関係なく、すべてのプログラムモジュールの名前を一覧表示するには、次のように入力します。

(dbx) modules [-v]

デバッグ情報を含むすべてのプログラムモジュールを一覧表示するには、次のように入力します。

(dbx) modules [-v] -debug

ここでは:

-v

言語、ファイル名などを出力する冗長モードを指定します。