次は,ユーザープログラムまたはGCCをデバッグするためのオプションについて説明します.
GNUツールのデバッガを使用する詳しい方法については,回を改めて詳しく解説することにし,ここではざっと説明します.
● -g
オペレーティングシステム本来の形式(stabs,COFF,XCOFF,DWARF)でデバッグ情報を生成します.GDBは,このデバッグ情報を取り扱うことができます.
● -ggdb
GDBで使うためのデバッグ情報を生成します.
● -gstabs
stabs形式がサポートされているならば,GDBによる拡張を使わないstabs形式でデバッグ情報を生成します.
● -gstabs+
stabs形式がサポートされているならば,GDBだけが理解できるGNUによる拡張を使ったstabs形式でデバッグ情報を生成します.
● -gcoff
COFF形式がサポートされているならば,COFF形式でデバッグ情報を生成します.
● -gxcoff
XCOFF形式がサポートされているならば,XCOFF形式でデバッグ情報を生成します.
● -gxcoff+
XCOFF形式がサポートされているならば,GDBだけが理解できるGNUによる拡張を使ったXCOFF形式でデバッグ情報を生成します.
● -gdwarf
DWARFバージョン1形式がサポートされているならば,DWARFバージョン1形式でデバッグ情報を生成します.
● -gdwarf+
DWARFバージョン1形式がサポートされているならば,GDBだけが理解できるGNUによる拡張を使ったDWARFバージョン1形式でデバッグ情報を生成します.
● -gdwarf-2
DWARFバージョン2形式がサポートされているならば,DWARFバージョン2形式でデバッグ情報を生成します.
● -glevel,-ggdblevel,-gstabslevel,-gcofflevel,
-gxcofflevel,-gdwarflevel,-gdwarf-2level
デバッグ情報を要求します.また,levelを指定して,どの程度の情報を要求するかを設定します.
● -p
解析プログラムprofに適するプロファイル情報を出力するための追加的なコードを生成します.
● -pg
解析プログラムgprofに適するプロファイル情報を出力するための追加的なコードを生成します.
● -a
基本ブロックに関するプロファイル情報を出力するための追加的なコードを出力します.
● -Q
コンパイラに,個々の関数をコンパイルしている際にはその関数の名前を表示させ,個々のパスが終了する際にはそのパスに関する統計情報を表示させます.
● -ax
基本ブロックをプロファイルするための追加的なコードを生成します.
● -fprofile-arcs
コンパイル時にアークに対して計測用のコードを出力します.
● -ftest-coverage
gcovユーティリティ用のデータファイルを作成します.
● -dletters
lettersで指定されるコンパイル過程のデバッグ出力を行います.これはGCCのデバッグに使われます.デバッグ出力のファイル名は,ほとんどがソースファイル名にある単語を追加して作られます.以下に,lettersに指定できる文字とその意味を列挙します.
・b 分岐の確率を計算した後に,ファイルfile.bpにダンプします.
・c 命令の結合の後に,ファイルfile.combineにダンプします.
・d 遅延分岐スケジューリングの後に,ファイルfile.dbrにダンプします.
・D 前処理の終了時点で,通常の出力に加えて,すべてのマクロ定義をダンプします.
・r RTLを生成後,ファイルfile.rtlにダンプします.
・j 最初のジャンプ最適化の後に,ファイルfile.jumpにダンプします.
・F ADDRESSOFを除去した後に,ファイルfile.addressofにダンプします.
・f フロー解析の後に,ファイルfile.flowにダンプします.
・g 広域的なレジスタの割り当ての後に,ファイルfile.gregにダンプします.
・G GCSEの後に,ファイルfile.gcseにダンプします.
・j 最初のジャンプ最適化の後に,ファイルfile.jumpにダンプします.
・J 最後のジャンプ最適化の後に,ファイルfile.jump2にダンプします.
・k レジスタからスタックへの変換の後に,ファイルfile.stackにダンプします.
・l 局所的なレジスタの割り当ての後に,ファイルfile.lregにダンプします.
・L ループの最適化の後に,ファイルfile.loopにダンプします.
・M マシン依存の再構成パスを実行後に,ファイルfile.machにダンプします.
・N レジスタ移動パスの後に,ファイルfile.regmoveにダンプします.
・r RTLを生成後,ファイルfile.rtlにダンプします.
・R 2回目の命令スケジューリングのパスの後に,ファイルfile.sched2にダンプします.
・s CSE(2)の後にファイルfile.cseにダンプします.
・S 最初の命令スケジューリングのパスの後に,ファイルfile.schedにダンプします.
・t 2回目のCSEパスの後に,ファイルfile.cse2にダンプします.
・a 上記のすべてのダンプを生成します.
・m メモリ使用に関する統計情報を,コンパイラ実行の最後に標準エラー出力に表示します.
・p どのようなパターンおよび代替パターンが使われたかを示すコメントによって,アセンブラの出力に注釈を加えます.個々の命令長も表示されます.
・x 関数をコンパイルするのではなく,その関数のRTLだけを生成します.通常は,rとともに使われます.
・y パース処理の実行中に,標準エラー出力にデバッグ情報をダンプします.
・A 種々雑多なデバッグ情報によって,アセンブラの出力に注釈を加えます.
● -fdump-unnumbered
デバッグ情報のダンプを行う際に,命令番号と行番号に関する注の出力を抑止します.
● -fpretend-float
クロスコンパイラを実行している際に,ホストマシンと同一の浮動小数点形式がターゲットマシンでも使われるものと想定します.
● -save-temps
通常は「一時的に」作成される中間ファイルを,永続的に保存します.これらの中間ファイルは,カレントディレクトリに置かれ,ソースファイルに基づく名前が与えられます.
● -print-file-name=library
リンク時に使われるであろうライブラリファイルlibraryの完全な絶対パス名を表示し,それ以外には何も行いません.このオプションが指定されると,GCCはコンパイルもリンクも一切行いません.ファイル名が表示されるだけです.
● -print-prog-name=program
-print-file-nameと似ていますが,このオプションはcppなどのプログラムを探します.
● -print-libgcc-file-name
-print-file-name=libgcc.aと同じです.これは-nostdlibや-nodefaultlibsを使うにもかかわらず,libgcc.aとはリンクしたいという場合に役に立ちます
● -print-search-dirs
configureにより構成されたインストールディレクトリの名前とgccが探索するプログラムディレクトリやライブラリディレクトリの一覧を表示します.
次回は,プリプロセッサオプション,リンクオプション,ディレクトリ検索用オプション,ターゲット機種とコンパイラバージョンの指定オプション,ハードウェアモデルとコンフィグレーションオプション,コード生成規約に対するオプション,実行に影響を与える環境変数などの事柄について,説明と検証を行います.
|