/Z7/Zi/ZI (デバッグ情報の形式)

/Z7/Zi、および /ZI コンパイラ オプションは、プログラムに対して作成するデバッグ情報の種類を選択し、デバッグ情報をオブジェクト ファイルに保存するのかプログラム データベース (PDB) ファイルに保存するのかを指定します。

構文

/Z7
/Zi
/ZI

解説

デバッグ オプションを指定すると、コンパイラは、デバッガーで使用される関数と変数のシンボル名、型情報、および行の場所を生成します。 このシンボリック デバッグ情報は、コンパイラによって生成されたオブジェクト ファイル (.obj ファイル) に含めるか、実行可能ファイル用の別の PDB ファイル (.pdb ファイル) に含めることができます。 デバッグ情報の形式オプションについては、次のセクションで説明します。

なし

既定では、デバッグ情報の形式オプションが指定されていない場合、コンパイラはデバッグ情報を生成しないので、コンパイルが高速になります。

/Z7

/Z7 オプションは、デバッガーで使用する完全なシンボリック デバッグ情報も含んだオブジェクト ファイルを生成します。 これらのオブジェクト ファイルとそこからビルドされたライブラリは、デバッグ情報がないファイルよりもサイズが大幅に大きくなる可能性があります。 シンボリック デバッグ情報には、変数や関数の名前と型、および行番号が含まれます。 PDB ファイルはコンパイラによって生成されません。 ただし、リンカーに /DEBUG オプションが渡された場合でも、これらのオブジェクト ファイルやライブラリから PDB ファイルを生成することはできます。

サードパーティ ライブラリのデバッグ バージョンを配布する場合は、PDB ファイルを持たないことによる利点があります。 ただし、プリコンパイル済みヘッダーのオブジェクト ファイルは、ライブラリ リンク フェーズ中およびデバッグ用に必要となります。 .pch オブジェクト ファイルに型情報しか含まれていない (コードがない) 場合は、ライブラリをビルドするときに、/Yl (デバッグ ライブラリの PCH 参照の挿入) オプション (既定で有効になっています) も使用する必要があります。

非推奨の /Gm (簡易リビルドの有効化) オプションは、/Z7 が指定されている場合には使用できません。

/Zi

/Zi オプションは、デバッガーで使用するシンボリック デバッグ情報を含んだ個別の PDB ファイルを生成します。 デバッグ情報はオブジェクト ファイルや実行可能ファイルに含められないので、それらのファイルが大幅に小さくなります。

/Zi の使用は最適化には影響しません。 ただし、/Zi/debug を暗黙的に指定します。 詳しくは、「/DEBUG (デバッグ情報の生成)」をご覧ください。

/Zi/clr の両方を指定した場合、DebuggableAttribute 属性はアセンブリ メタデータ内に配置されません。 必要な場合は、ソース コードで指定する必要があります。 この属性は、アプリケーションの実行時パフォーマンスに影響します。 Debuggable 属性によるパフォーマンスへの影響とその対処方法の詳細については、「イメージのデバッグの簡略化」を参照してください。

コンパイラは PDB ファイルに <project>.pdb という名前を付けます。ここで <project> はプロジェクトの名前です。 プロジェクトの外部でファイルをコンパイルすると、コンパイラは VC<x>.pdb という名前の PDB ファイルを作成します。ここで、<x> は、使用されているコンパイラ バージョンのメジャー バージョン番号とマイナー バージョン番号を連結したものです。 コンパイラは、このオプションを使用して作成された各オブジェクト ファイルに、PDB の名前と、識別タイムスタンプ付き署名を埋め込みます。 この名前と署名により、シンボリック情報と行番号情報の場所がデバッガーに示されます。 PDB ファイルの名前と署名は、デバッガーに読み込まれるシンボルの実行可能ファイルと一致する必要があります。 WinDBG デバッガーでは、.symopt+0x40 コマンドを使用して、一致しないシンボルを読み込むことができます。 Visual Studio には、一致しないシンボルを読み込むための同様のオプションはありません。

/Zi を使って生成したオブジェクトからライブラリを作成する場合は、ライブラリをプログラムにリンクするときに該当する PDB ファイルが必要になります。 つまり、ライブラリを配布する場合は、その PDB ファイルも併せて配布する必要があります。 PDB ファイルを使わずにライブラリにデバッグ情報を含めるには、/Z7 オプションを選択する必要があります。 プリコンパイル済みヘッダー用のオプションを使うと、プリコンパイル済みヘッダーのデバッグ情報は、その他のソース コードのデバッグ情報と共に PDB ファイルに保存されます。

/ZI

/ZI オプションは /Zi と似ていますが、エディット コンティニュ機能をサポートする形式で PDB ファイルを生成します。 エディット コンティニュ機能のデバッグを使用するには、このオプションを使用する必要があります。 エディット コンティニュ機能は開発者の生産性向上に役立ちますが、コード サイズ、パフォーマンス、コンパイラの標準準拠に関して問題が発生する可能性があります。 ほとんどの最適化処理はエディット コンティニュと互換性がないため、/ZI を使用すると、コード内の #pragma optimize ステートメントが無効になります。 /ZI オプションは、__LINE__ 定義済みマクロの使用と互換性がありません。/ZI を使用してコンパイルされたコードでは、非型テンプレート引数として __LINE__ を使用することはできません (ただし、マクロ展開で __LINE__ を使用することはできます)。

/ZI オプションを使用すると、/Gy (関数レベルのリンクの有効化) オプションと /FC (診断時のソース コード ファイルの完全パス) オプションの両方がコンパイルで強制的に使用されます。

/ZI は、/clr (共通言語ランタイムのコンパイル) と互換性がありません。

Note

/ZI オプションは、x86 プロセッサと x64 プロセッサを対象とするコンパイラでのみ使用できます。 このコンパイラ オプションは、ARM プロセッサを対象とするコンパイラでは使用できません。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[全般] プロパティ ページを選択します。

  3. [デバッグ情報の形式] プロパティを変更します。 [OK] を選択して変更を保存します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ オプション
MSVC コンパイラのコマンド ライン構文