ここでは、デバッグと最適化を制御するさまざまなコマンドライン・オプションの関係について説明します。
-g (Linux* および Mac OS* X) または /debug:full (Windows*) を使用してデバッグを有効にすると、最適化が無効になります。この場合、コマンドラインで、最適化のコンパイラー・オプションを明示的に指定することで、最適化を有効にできます。
次の表は、一般的なデバッグオプションと最適化オプションをまとめたものです。
-O0 (Linux* および Mac OS* X) または /Od (Windows*) |
/Od オプションはすべての最適化をオフにするため、最適化が行われる前にプログラムをデバッグすることができます。デバッグを行う場合のデフォルトの動作です。 Linux* および Mac OS* X では、-O0 (または -g) オプションを指定すると、-fno-omit-frame-pointer が設定されます。 詳細は、次のトピックを参照してください。
|
/O1 または /O1 -O2 または /O2 -O3 または /O3 |
コードの最適化レベルを指定します。これらのオプションを使用する場合、デバッグを行うには -debug extended を使用することを推奨します。 詳細は、次のトピックを参照してください。
|
-g または /debug:full |
ソースレベルのデバッガーで使用するため、オブジェクト・コードの中にシンボリック・デバッグ情報と行番号を生成します。-O2 (Linux* および Mac OS* X) または /O2 (Windows*) をオフにして、-O0 (Linux* および Mac OS* X) または /Od (Windows*) をデフォルトにします。ただし、コマンドラインで -O2、-O1、-O3 (Linux* および Mac OS* X) または /O2、/O1、/O3 (Windows*) を明示的に指定する場合は除きます。 詳細は、次のトピックを参照してください。
|
-debug extended (Linux* および Mac OS* X) |
拡張デバッグの設定を指定します。 詳細は、次のトピックを参照してください。
|
-fp または /Oy- (IA-32 アーキテクチャーのみ) |
最適化で ebp レジスターの使用を無効にし、ebp レジスターをフレームポインターとして使用するように設定します。 詳細は、次のトピックを参照してください。
|
-traceback (Linux* および Mac OS* X) または /traceback (Windows*) |
コンパイラーがオブジェクト・ファイルに追加情報を生成するので、シンボリック・スタック・トレースバックが可能になります。 詳細は、次のトピックを参照してください。
|
コマンドラインで、オブジェクト・ファイルにシンボリック・デバッグ情報を生成する -g (Linux* および Mac OS* X) または /debug:full (Windows*) とともに、最適化オプション O1、O2、または O3 を指定すると、シンボリック・デバッグ対応のコードを生成します。
-g オプションまたは /debug:full オプションとともに O1、O2、または O3 オプションを指定すると、最適化の影響でデバッグ情報の一部が不正確になることがあります。Linux* および Mac OS* X でこの問題を回避するには、-debug extended オプションも指定します。
最適化とデバッグは明示的に選択するようにしてください。
最適化の影響を受けないようにプログラムをデバッグする必要がある場合は、すべての最適化をオフにする -O0 オプション (Linux* および Mac OS* X) または /Od オプション (Windows*) を使用してください。
最適化を有効にしてプログラムをデバッグする必要がある場合は、コマンドラインで debug extended オプションとともに O1、O2、または O3 オプションを指定することができます。
最適化レベルを指定しない場合、-g オプションまたは /debug:full オプションは、速度を低下させる -O0 または /Od を設定するため、プログラムの実行速度を低下させます。ただし、-O2 (Linux* および Mac OS* X) または /O2 (Windows*) と、-g (Linux* および Mac OS* X) または /debug:full (Windows*) の両方を指定すると、速度はそれほど低下しません。
次の表は、-g オプションまたは /debug:full オプションと、最適化オプションを組み合わせて使用した場合の効果を説明したものです。
オプション |
結果 |
---|---|
-g (Linux* および Mac OS* X) または /debug:full (Windows*) |
デバッグ情報が生成され、-O0 または /Od が有効になります (最適化が無効になります)。Linux* および Mac OS* X システムでは、IA-32 アーキテクチャーを対象にコンパイルする場合は、-fp が有効になります。 |
-g -O1 (Linux* および Mac OS* X) または /debug:full /O1 (Windows*) |
デバッグ情報が生成され、O1 による最適化が有効になります。 |
-g -O2 (Linux* および Mac OS* X) または /debug:full /O2 (Windows*) |
デバッグ情報が生成され、O2 による最適化が有効になります。 |
-g -O2 (Linux* および Mac OS* X) または /debug:full /O2 /Oy- (Windows*) |
デバッグ情報が生成され、O2 による最適化が有効になります。IA-32 アーキテクチャー・ベースの Windows* システムでは、/Oy が無効になります。 |
-g -O3 -fp (Linux* および Mac OS* X) または /debug:full /O3 (Windows*) |
デバッグ情報が生成され、O3 による最適化が有効になります。Linux システムでは、IA-32 アーキテクチャーを対象にコンパイルする場合は、-fp が有効になります。 |
最適化されたプログラムで debug extended を使用しても、最適化処理中にコードが移動または削除されるため、すべての変数を確認したり、すべての行にブレークポイントを設定することはできません。
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。