1. ホーム
  2. c

[解決済み] GCC -g vs -g3 GDBフラグ。その違いとは?

2022-07-13 05:16:25

質問

C言語のソースコードをgccやClangでコンパイルするとき、私は常に -g フラグを使用して、gdb 用のデバッグ情報を生成します。

gcc -g -o helloworld helloworld.c

私は、ある人々が -g3 を代わりに使う人もいるようです。の違いは何ですか? -g-g3 のフラグはどうなっていますか?また -g-ggdb ?

どのように解決するのですか?

からの ドキュメント :

-g

オペレーティングシステムのネイティブフォーマット(stabs、COFF、XCOFF、またはDWARF 2)でデバッグ情報を生成します。GDB はこのデバッグ情報を使って作業することができます。 デバッグ情報を使用できます。stabs フォーマットを使用するほとんどのシステムで、-g を使用すると、GDB だけが使用できる特別なデバッグ情報を使用できます。 この余分な情報は、GDB でのデバッグの動作を向上させますが、おそらく他のデバッガーをクラッシュさせたり、拒否したりします。 この余分な情報は、GDB でのデバッグ作業を向上させますが、他のデバッガーをクラッシュさせたり、プログラムの読み取りを拒否させたりする可能性があります。もしあなたが を使用すると、余分な情報を生成するかどうかを確実に制御できます。 -gstabs+、-gstabs、-gxcoff+、-gxcoff、または-gvms (下記参照) を使用してください。

...


<ブロッククオート

-メガバンク

GDB で使用するためのデバッグ情報を生成します。これは、利用可能な最も表現力の高い形式 (DWARF 2、stabs、またはそれらがサポートされていない場合はネイティブ形式) を使用することを意味します。 を使用し、可能であれば GDB 拡張も使用します。 可能であればGDB拡張も含む。


-gvmslevel(レベル

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

....

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