2010-01-15 16 views
10

Ich versuche, einen Haltepunkt in meinem Programm hinzufügenWie Debuggen mit Gdb?

b {line number} 

verwenden, aber ich bin immer einen Fehler bekommen, die sagt:

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

Was soll ich tun?

+1

http://www.yolinux.com/TUTORIALS/GDB-Commands.html hier ist ein gutes gdb Befehl Blatt. Hier finden Sie alles, was Sie über gdb wissen müssen. – Phong

Antwort

22

Hier ein Kurzanleitung für 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 mit der Option -g:

gcc -g -o test test.c 

Laden Sie die ausführbare Datei, die jetzt die Debug-Symbole enthalten, in GDB:

gdb --annotate=3 test.exe 

Jetzt sollten Sie sich an der GDB Prompt finden. Dort können Sie Befehle an gdb ausgeben. Sagen Sie einen Haltepunkt in Zeile 11 platzieren und die Ausführung Schritt für Schritt durch, um die Werte der lokalen Variablen Druck - die folgenden Befehle Sequenzen wird Ihnen helfen, dies zu tun:

(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) 

Kurz gesagt, sind die folgenden Befehle alle Sie müssen mit gDB loszulegen:

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. 

Typ Hilfe bei der (gDB) prompt, um eine Liste und Beschreibung aller gültigen Befehle.

4

starten gdb mit der ausführbaren Datei als Parameter, so dass es weiß, welches Programm Sie debuggen möchten:

gdb ./myprogram 

Dann sollten Sie in der Lage sein, Breakpoints zu setzen. Zum Beispiel:

b myfile.cpp:25 
b some_function 
+4

und vergessen Sie nicht, mit Debugging-Informationen zu kompilieren (gcc hat den Parameter "-g"). – wilhelmtell

2

Sie müssen die Namen der ausführbaren Datei sagen, gdb, entweder, wenn Sie gdb oder mit dem Datei-Befehl ausführen:

$ gdb a.out 

oder

(gdb) file a.out 
2

Stellen Sie sicher, dass Sie die Option -g beim Kompilieren verwendet haben.

-1

Sie müssen die Option -g oder -ggdb zur Kompilierzeit Ihres Programms verwenden.

Z. B. gcc -ggdb file_name.c ; gdb ./a.out

Verwandte Themen