Linux GCCコンパイラオプション

Linux GCCコンパイラオプション

私は最近、Linuxをプログラミングツールとして使用し始めました。私の本では、GCCが2つのオプション、-gつまりと一緒に使用されていることがわかります-o。これで-oファイル名が設定されていることがわかりますが、その目的は何ですか-g?私はこれがデバッグに関連していると思いましたが、-g引数なしでコンパイルされたプログラムもデバッグ可能です。だからそれは何ですか?

答え1

マニュアル引用:Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.。私はRTFMの専門家になるつもりはありませんが、-gのマニュアルセクションを読んでこの場合、質問に対する答えを得ることができます。 -oによると、あなたは正しいです。

答え2

-gオプションを使用すると、GDBが使用できる追加のデバッグ情報を使用できます。以下はCコードの例です。

int main() {
    int x = 1/0;    
}

-gオプションなしでコンパイルしてgdb出力を見てみましょう。

$ gcc test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test 

Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main ()

次に、-gオプションを使用してください。

$ gcc -g test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test 

Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main () at test.c:2
2       int x = 1/0;    

ご覧のとおり、エラー行に関する情報があります。

答え3

デバッグ関連:

(からman gcc

-gオペレーティングシステムのデフォルト形式(stabs、COFF、XCOFF、またはDWARF 2)でデバッグ情報を生成します。 GDBはこのデバッグ情報を使用できます。

プログラムのシンボルをデバッグせずにプログラムでデバッガを実行できますが、これは暗闇の中でキーを見つけることと同じです。たとえば、ブレークポイントを設定できません。

(gdb) break 6
No symbol table is loaded.

これは面倒なことです。

関連情報