Ketika saya menggunakan gcc untuk mengkompilasi program C saya biasanya menggunakan -g
untuk mendapatkan beberapa informasi debug ke dalam file elf sehingga gdb dapat membantu saya jika diperlukan.
Namun, saya perhatikan bahwa beberapa program menggunakan -ggdb
, karena itu seharusnya membuat info debug lebih ramah gdb.
Bagaimana perbedaannya dan mana yang direkomendasikan untuk digunakan?
Catatan: Tautan ke opsi untuk Debugging Program Anda atau GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
-g
dan-ggdb
serupa dengan sedikit perbedaan, saya membaca ini di sini :sumber
Saya memiliki setidaknya satu contoh di mana -ggdb bekerja lebih baik untuk saya daripada opsi debug lain yang kami gunakan:
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)
Catatan: Ini hanya terjadi pada kotak x86-64 dan hilang ketika dikompilasi dengan -ggdb. Tetapi versi debugger yang lebih baru berfungsi bahkan dengan -gstabs +
sumber
Satu hal adalah bahwa "-g" bersifat portabel (misalnya dalam Makefiles yang ditujukan untuk dijalankan pada platform non-GNU). Saya memiliki masalah portabilitas terkait -g vs. -ggdb pada mesin AIX baru-baru ini, itulah mengapa saya mengungkitnya.
Tidak tahu apa -ggdb menambahkan kegunaan.
sumber
Ini adalah penjelasan resminya: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
Hanya sedikit fakta yang sulit, tapi tetap menarik.
sumber