dbx は、最適化コードのデバッグを部分的にサポートしています。サポートの範囲は、プログラムのコンパイル方法によって大幅に異なります。
最適化コードを分析する場合、次のことが可能です。
関数起動時に実行を停止する (stop in function コマンド)
引数を評価、表示、または変更する
大域変数または静的変数を評価、表示、または変更する
ただし、最適化コードでは、dbx は次のことを行うことができません。
ある行から別の行へステップ実行する (next または step コマンド)
局所変数を評価、表示、または変更する
dbx を効率的に使用するには、プログラムを -g または -g0 オプションによってコンパイルする必要があります。-g オプションは、コンパイラに対して、コンパイル中にデバッグ情報を生成するよう指示します。
たとえば、C++ を使用してコンパイルするには、次のように入力します。
% CC -g example_source.cc
最適化コードを使用して dbx で使用するには、ソースコードを -O (大文字の O) と -g オプションの両方によってコンパイルしてください。
C++ では、-g はデバッグをオンにし、関数のインライン化をオフにします。-g0 (ゼロ) オプションはデバッグをオンにしますが、関数のインライン化には影響を与えません。-g0 オプションによってインライン関数をデバッグすることはできません。 -g0 オプションは、リンク時間と dbx 起動時間を大幅に削減します。これらの時間はプログラムによるインライン関数の使用により異なります。
ほとんどのデバッガの機能を使用するにはプログラムを -g によってコンパイルする必要があるのに対し、dbx では -g を使用しないでコンパイルされたコードに対して、次のレベルのサポートを提供しています。
バックトレース (dbx where コマンド)
関数の呼び出し (ただしパラメータチェックなし)
大域変数のチェック
ただし、dbx では、-g オプションを使用してコンパイルされたソースコード以外を表示できないことに注意してください。これは、strip -x が適用されたコードについてもあてはまります。
完全なサポートを提供するためには、共有ライブラリも -g オプションを使用してコンパイルする必要があります。-g によってコンパイルされていない共有ライブラリモジュールをいくつか使用してプログラムを作成した場合でも、そのプログラムをデバッグすることはできます。ただし、これらのライブラリモジュールに関する情報が生成されていないため、dbx の機能を完全に使用することはできません。
dbx は、完全にストリップされた (制御データなどが取り除かれた) プログラムをデバッグすることができます。これらのプログラムには、プログラムをデバッグするために使用できる情報がいくつか含まれますが、外部から識別できる関数しか使用できません。実行時検査は、ストリップされたプログラムまたはロードオブジェクトに対しては、動作しません。