2010-01-15 26 views
10

Sto cercando di aggiungere un punto di interruzione nel mio programma utilizzandoCome eseguire il debug usando gdb?

b {line number} 

ma sto ottenendo sempre un errore che dice:

No symbol table is loaded. Use the "file" command. 

Cosa devo fare?

+1

http://www.yolinux.com/TUTORIALS/GDB-Commands.html ecco un buon foglio di comando di gdb. Troverai tutto ciò che devi sapere su gdb. – Phong

risposta

22

Ecco un tutorial di avvio rapido per gdb:

/* test.c */ 
/* Sample program to debug. */ 
#include <stdio.h> 
#include <stdlib.h> 

int 
main (int argc, char **argv) 
{ 
    if (argc != 3) 
    return 1; 
    int a = atoi (argv[1]); 
    int b = atoi (argv[2]); 
    int c = a + b; 
    printf ("%d\n", c); 
    return 0; 
} 

Co mpile con l'opzione -g:

gcc -g -o test test.c 

Caricare il file eseguibile, che ora contiene i simboli di debug, in gdb:

gdb --annotate=3 test.exe 

Ora si dovrebbe trovare te stesso al prompt di gdb. Qui puoi impartire comandi a gdb. Dire che ti piace di mettere un punto di interruzione alla linea 11 e passo attraverso l'esecuzione, la stampa i valori delle variabili locali - le sequenze di comandi seguenti vi aiuteranno a fare questo:

(gdb) break test.c:11 
Breakpoint 1 at 0x401329: file test.c, line 11. 
(gdb) set args 10 20 
(gdb) run 
Starting program: c:\Documents and Settings\VMathew\Desktop/test.exe 10 20 
[New thread 3824.0x8e8] 

Breakpoint 1, main (argc=3, argv=0x3d5a90) at test.c:11 
(gdb) n 
(gdb) print a 
$1 = 10 
(gdb) n 
(gdb) print b 
$2 = 20 
(gdb) n 
(gdb) print c 
$3 = 30 
(gdb) c 
Continuing. 
30 

Program exited normally. 
(gdb) 

In breve, i seguenti comandi sono tutti è necessario iniziare a utilizzare gdb:

break file:lineno - sets a breakpoint in the file at lineno. 
set args - sets the command line arguments. 
run - executes the debugged program with the given command line arguments. 
next (n) and step (s) - step program and step program until it 
         reaches a different source line, respectively. 
print - prints a local variable 
bt - print backtrace of all stack frames 
c - continue execution. 

tipo di aiuto alla (gdb) per ottenere un elenco e la descrizione di tutti i comandi validi.

4

gdb Inizia con l'eseguibile come parametro, in modo che sappia quale programma si desidera eseguire il debug:

gdb ./myprogram 

allora si dovrebbe essere in grado di impostare i punti di interruzione. Per esempio:

b myfile.cpp:25 
b some_function 
+4

e non dimenticare di compilare con le informazioni di debug (gcc ha il parametro "-g"). – wilhelmtell

2

Dovete dire gdb il nome del file eseguibile, sia quando si esegue gdb o utilizzando il comando file:

$ gdb a.out 

o

(gdb) file a.out 
2

Assicurarsi di aver utilizzato l'opzione -g durante la compilazione.

-1

È necessario utilizzare l'opzione -g o -ggdb al momento della compilazione del programma.

esempio gcc -ggdb file_name.c ; gdb ./a.out

Problemi correlati