2009-03-21 6 views
62

gccを使用してCプログラムをコンパイルすると、-g通常、elfファイル にデバッグ情報を取得するために、gdbが必要な場合に役立ちます。gcc -ggdbとgccの違い-12

しかし、一部のプログラムで-ggdbを使用していることがわかりました。これは、 のデバッグ情報をより使いやすくするためです。

どのように違いがあり、どちらを使用することをおすすめしますか?


注:お使いのプログラムまたはGCCをデバッグするためのオプションにリンク、http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

答えて

27

違いはない可能性があります - OSのネイティブフォーマットと、デバッグ情報をどのように移植したいかによって異なります。 GCCマニュアルDebugging Optionsを参照してください。

5

一つは「-g」は、ポータブルであるということである(例えばMakefileの中の非GNU上で実行される運命プラットフォーム)。私は最近、AIXマシンで-gと-ggdbに関する移植性の問題を抱えていました。

-ggdbでユーザビリティが向上しました。

9

私は-ggdbたちが使用していた別のデバッグオプションよりも、私のために、より良い仕事を少なくとも1つの例があります。

[email protected]:~> cat > main.c 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
     printf("Args :%d\n", argc); 
     for (;argc > 0;) 
       printf("%s\n", argv[--argc]); 

     return 0; 
} 
[email protected]:~> gcc -gstabs+ main.c -o main 

[email protected]:~> file main 
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped 
[email protected]:~> /usr/bin/gdb ./main 
GNU gdb 6.6.50.20070726-cvs 
Copyright (C) 2007 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-suse-linux"... 
Using host libthread_db library "/lib64/libthread_db.so.1". 
(gdb) break main 
Breakpoint 1 at 0x400577: file main.c, line 5. 
(gdb) run 
Starting program: /home/amitkar/main 

Breakpoint 1, main (argc=Cannot access memory at address 0x8000df37d57c 
) at main.c:5 
5    printf("Args :%d\n", argc); 
(gdb) print argc 
Cannot access memory at address 0x8000df37d57c 
(gdb) 

注:これは、x86-64のボックスにのみ発生し、-ggdbしてコンパイルするとき消えます。しかし、デバッガの新しいバージョンでも-gstabs +

35

-g-ggdbは、いくつかわずか差とほぼ類似しており、私はこのhere読み取る:

を-gはOS¹sネイティブ形式(スタブ、COFF、XCOFF、またはDWARF 2)でデバッグ情報を生成します。

-ggdbは、特にgdb向けのデバッグ情報を生成します。

-ggdb3は、マクロ定義を含む追加のデバッグ情報を生成します。レベルを指定しないで-ggdb自体を指定すると、 はデフォルトで

-ggdb2(つまりレベル2のgdb)になります。