110

gcc を使用して C プログラムをコンパイルするときは、通常-g、必要に応じて gdb が役立つように、いくつかのデバッグ情報を elf ファイルに取得するために使用します。

-ggdbただし、デバッグ情報をより gdb に適したものにするため、一部のプログラムでは を使用していることに気付きました。

それらはどのように異なり、どちらを使用することをお勧めしますか?


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

4

5 に答える 5

78

-g-ggdbいくつかのわずかな違いはありますが、私はこれをここで読んでいます:

-gOS のネイティブ形式 (stab、COFF、XCOFF、または DWARF 2) でデバッグ情報を生成します。

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

-ggdb3たとえば、マクロ定義を含む追加のデバッグ情報を生成します。

-ggdbレベルを指定せずに単独で実行します-ggdb2(つまり、レベル 2 の場合は gdb)。

于 2013-02-11T11:58:41.337 に答える
42

違いがない可能性があります-OSのネイティブ形式と、デバッグ情報をどの程度移植したいかによって異なります。GCC マニュアルのデバッグ オプションを参照してください。

于 2009-03-21T08:40:37.550 に答える
13

-ggdb が、使用していた別のデバッグ オプションよりもうまく機能した例が少なくとも 1 つあります。

amitkar@lohgad:~> 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;
}
amitkar@lohgad:~> gcc -gstabs+ main.c -o main

amitkar@lohgad:~> 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
amitkar@lohgad:~> /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+ でも動作します

于 2009-07-09T20:54:00.410 に答える
9

1 つのことは、"-g" が移植可能であることです (たとえば、非 GNU プラットフォームで実行される予定の Makefile で)。最近、AIX マシンでの -g と -ggdb の移植性の問題がありました。

ただし、 -ggdb が使いやすさに何を追加するかについてはわかりません。

于 2009-03-21T08:17:38.103 に答える
5

これは公式の説明です: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

いくつかの確かな事実だけですが、とにかく興味深いです。

于 2011-02-25T21:29:20.233 に答える