2012-05-06 18 views
58

gccまたはClangでCソースコードをコンパイルするときは、常に-gフラグを使用してgdbのデバッグ情報を生成します。GCC -g対-g3 GDBフラグ:違いは何ですか?

gcc -g -o helloworld helloworld.c

私は何人かの人々が代わりに-g3をお勧めしていることに気づきました。 -g-g3フラグの違いは何ですか?また、-g-ggdbの間に違いがありますか? docsから

+7

ドキュメントに記載されていない内容を知りたいですか? –

+7

私は他の人のメークファイルを使っているので私はここに来ました。文書は獣です。良い質問StackOverflowのGoogleから簡単な答えを見つけるために持っている。 – GreenAsJade

答えて

64

:オペレーティングシステムのネイティブフォーマットで

-g

プロデュースデバッグ情報(スタブ、COFF、XCOFF、またはDWARF 2)。 GDBはこの のデバッグ情報で動作します。スタブ形式を使用するほとんどのシステムでは、-g は、GDBだけが使用できる特別なデバッグ情報の使用を可能にします。この 追加情報はGDBのデバッグ作業を改善しますが、おそらく は他のデバッガにクラッシュさせたり、プログラムの読み込みを拒否させたりします。 で追加の情報を生成するかどうかを制御するには、 -gstabs +、-gstabs、-gxcoff +、-gxcoff、-gvms(下記参照)を使用します。

-ggdb

...


GDBで使用するためにデバッグ情報を生成します。つまり、可能な限り の場合は、GDB拡張を含む最も表現力の高いフォーマット(DWARF 2、スタブ、またはいずれもサポートされていない場合はネイティブ フォーマット)を使用することを意味します。また


-gvmslevel

デバッグ情報を要求し、どの程度の情報を指定するためにレベルを使用しています。デフォルトレベルは2です。レベル0では、デバッグ情報はまったく になりません。したがって、-g0は-gを否定します。

....

レベル3は、プログラム内のすべてのマクロ定義 本ように、追加情報を含んでいます。 -g3を使用すると、一部のデバッガでマクロ展開がサポートされます。

+5

"最も表現力豊かな形式"と "追加情報"の違いは何かを説明することができますか?これらのパラメータは無料ですか?それらの多くはGDBについて言及しています...ありがとう! – rogerdpack

8

TL; DR:はあなたの特定の質問に答えるために、-g3「は、そのようなマクロ定義などの追加情報が含まれていますが-g3を使用する場合、一部のデバッガはマク​​ロ展開をサポートしています。」-gはしませんが、。

gccは-g0(デバッグ情報が無効)から-g3(最大デバッグ情報)までの4つのレベルのデバッグ情報をサポートしています。

-gを指定すると、-g2に相当します。不思議なことに、gcc docsは、どの情報について-g/-g2が含まれているか、または除外されているかについてほとんど言いません。

デバッグ情報を要求し、レベルを使用して情報の量を指定します。デフォルトレベルは2です。 レベル0はデバッグ情報をまったく生成しません。したがって、-g0は-gを否定します。

レベル1は、デバッグを予定していないプログラムのバックトレースを作成するのに十分な最小限の情報を生成します。これには、関数と外部変数、および行番号テーブルの説明が含まれますが、ローカル変数に関する情報は含まれません。

レベル3には、プログラムに存在するすべてのマクロ定義などの追加情報が含まれています。一部のデバッガでは、-g3を使用するとマクロ展開がサポートされます。

関連する問題