gcc または Clang を使用して C ソース コードをコンパイルするときは、常に-g
フラグを使用して gdb のデバッグ情報を生成します。
gcc -g -o helloworld helloworld.c
-g3
代わりに勧める人がいることに気づきました。-g
フラグと-g3
フラグの違いは何ですか? また、 と の間に違いは-g
あり-ggdb
ますか?
ドキュメントから:
-g
オペレーティング システムのネイティブ形式 (stabs、COFF、XCOFF、または DWARF 2) でデバッグ情報を生成します。GDB は、このデバッグ情報を処理できます。stabs 形式を使用するほとんどのシステムでは、-g により、GDB のみが使用できる追加のデバッグ情報を使用できるようになります。この追加情報により、GDB でのデバッグ作業が改善されますが、他のデバッガーがクラッシュしたり、プログラムの読み取りを拒否したりする可能性があります。追加情報を生成するかどうかを確実に制御したい場合は、-gstabs+、-gstabs、-gxcoff+、-gxcoff、または -gvms (以下を参照) を使用します。
...
-ggdb
GDB で使用するデバッグ情報を生成します。これは、可能な場合は GDB 拡張機能を含め、利用可能な最も表現力の高い形式 (DWARF 2、スタブ、またはどちらもサポートされていない場合はネイティブ形式) を使用することを意味します。
-gvmslevel
デバッグ情報を要求し、level を使用して情報の量を指定します。デフォルトのレベルは 2 です。レベル 0 では、デバッグ情報はまったく生成されません。したがって、-g0 は -g を無効にします。
....
レベル 3 には、プログラムに存在するすべてのマクロ定義などの追加情報が含まれます。-g3 を使用すると、一部のデバッガーはマクロ展開をサポートします。