ho costruito e installato GCC 4.8.1 dai sorgenti:GCC non produce linea di informazioni sul numero, anche con l'opzione -g
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --disable-multilib
Thread model: posix
gcc version 4.8.1 (GCC)
E ho scritto un semplice programma inutile:
$ cat hw.c
#include <stdio.h>
void foo()
{
int a;
scanf("%d", &a); /* So I can press ctrl+c here. */
printf("Hello world!\n");
}
int main()
{
foo();
}
Ora compilo questo:
$ gcc -g -O0 hw.c -o hw
poi ha iniziato il debug con GDB :
$ gdb hw
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/calmarius/workdir/crucible/hw/hw...done.
(gdb)
Run it e Ctrl + C immediatamente:
(gdb) run
Starting program: /home/dcsirmaz/workdir/crucible/hw/hw
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b018b0 in __read_nocancel() at ../sysdeps/unix/syscall-template.S:82
82 ../sysdeps/unix/syscall-template.S: Nincs ilyen fájl vagy könyvtár.
ho ottenuto i nomi delle funzioni nel backtrace, ma non i numeri di riga nel mio codice:
(gdb) bt
#0 0x00007ffff7b018b0 in __read_nocancel() at ../sysdeps/unix/syscall-template.S:82
#1 0x00007ffff7a95ff8 in _IO_new_file_underflow (fp=0x7ffff7dd4340) at fileops.c:619
#2 0x00007ffff7a9703e in _IO_default_uflow (fp=0x7ffff7dd4340) at genops.c:440
#3 0x00007ffff7a74fb6 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=0x7fffffffe018, errp=0x0) at vfscanf.c:620
#4 0x00007ffff7a790bd in __isoc99_scanf (format=<optimized out>) at isoc99_scanf.c:37
#5 0x000000000040054e in foo()
#6 0x0000000000400568 in main()
Cosa è andato storto? Forse è qualcosa con la configurazione?
Più precisamente, GCC-4.8 usa per impostazione predefinita dwarf4 (http://gcc.gnu.org/gcc-4.8/changes.html), ma il tuo GDB è troppo vecchio per capirlo. Costruisci con '-gdwarf-2' e otterrai i numeri di linea. Oppure aggiorna GDB a un nuovo dalla build di origine. –
Quindi gdb 7.4 è troppo vecchio. – Calmarius
Costruire e installare gdb 7.6 ha risolto il problema. – Calmarius