Debugging GDB

Hallo zusammen, fürchte muss euch nochmals stören:

Ich habe dieses kleine "test" Programm geschrieben:
-------------------------------------------------------------------------------------
#include <stdio.h>

int main()
{
int i;
for(i=0; i < 10; i++)
{
printf("Hello, world!\n");
}
return 0;
}
-------------------------------------------------------------------------------------

Ich speichere das als firstprog.c ab und gebe im Terminal:
g++ firstprog.c -o test und anschliessend ./test ein.
Alles läuft wunderbar.

Nun will ich aber mit: gdb -q ./test das programm debuggen um den Zustand der Prozessorregister anzuschauen. Allerdings kommt dann folgende meldung:

Reading symbols from /root/test...(no debugging symbols found)...done.

Was kann ich dagegen machen?

Danke für eure Antworten ;-):thumb_up:
 
Du kannst beim Kompilieren deines Programms -ggdb als Flag angeben, so dass die Debugging-Informationen einkompiliert werden.
 
Ok ich habe jetzt sowas eingegeben: g++ firstprog.c -o test -ggdb

Ok?

Denn wenn ich jetzt: gdb -q ./test eingebe geht das.

Stimmt es trozdem? 8o
 
Ja, -ggdb ist ein Parameter für den gcc. Üblicherweise schreibt man aber die Parameter vor der Input-Datei. In einer einigermassen aktuellen Version sollte das aber keine Rolle mehr spielen. Siehe auch 'gcc --help' oder 'man gcc' wenn du auf einem Linux/Unix-System arbeitest.
 
Allso ich wollte eingendlich ein solches "Bild" haben: (root: ist meine Eingabe)

root: gdb -q ./a.out
root: break main
root: run

Und nun sollte es etwa so aussehen:

Breakpoint 1, 0x0804837a in main()
(gdb) info registers
eax 0xbffff894 -1073743724
ecx 0x48e0fe81 1222704769
edx 0x1 1
ebx 0xb7fd6ff4 -1208127500

etc.

also ich möchte mir den Zustand der Prozessorregister anschauen.

Aber alles was rauskommt ist der Quellcode, also:
#include <iostream>
int main()
etc.


Kann mir da jemand helfen?
 
Wenn 'root:' dein Prompt ist, dann werden die Befehle 'break main' usw. nicht korrekt im Debugger ausgeführt, denn der hat ein eigenes Prompt. Das mag daran liegen, dass du dein Programm ja 'test' genannt hast (gcc -o test ... und nicht a.out. Evtl. solltest du dich erstmal mit den Tools, die du verwendest, vertraut machen, bevor du mit Debugging anfängst. So wie es aussieht tippst du einfach nur Befehle irgendwo ab ohne zu verstehen, was diese tun.
 
Beim debuggen gebe ich schon ./test ein wenn ich es auch so genannt habe aber das ergebnis ist das gleiche.

Ach ja ich gebe es nicht mit meinem Prompt ein, das gallt nur zur veranschaulichung, dass ihr meine Eingaben etc. auseinanderhalten könnt.

Was ich eingebe gebe ich schon in (gdb) ein. Also die Eingaben erfolgen im Debugger, allerdings ist die Ausgabe nicht die erwünschte.

Hier ein Ausschnit aus dem Terminal:
--------------------------------------------------------------------------------------------------------------------------------------------------------------
root@root:~# g++ test.c -ggdb -o main
root@root:~# ./main
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
root@root:~# gdb -q ./main
Reading symbols from /root/main...done.
(gdb) break main
Breakpoint 1 at 0x80484cd: file test.c, line 6.
(gdb) run
Starting program: /root/main

Breakpoint 1, main () at test.c:6
6 for(i=0; i < 10; i++)
 
Zuletzt bearbeitet:
Lass mal die quiet-Option für den GDB weg und schau ob es irgendwelche Warnungen gibt, wenn du 'gdb ./test' in dem Ordner aufrufst, in dem sich dein Programm befindet.
 
root@root:~# gdb ./main
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 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 "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/main...done.
(gdb) break main
Breakpoint 1 at 0x80484cd: file test.c, line 6.
(gdb) run
Starting program: /root/main

Breakpoint 1, main () at test.c:6
6 for(i=0; i < 10; i++)
(gdb)


------------------------------

Das gleiche.
 
Wenn du kein 'info registers' aufrufst, wirst du auch kaum den Inhalt der Register zu Gesicht bekommen. ;)

Im übrigen brauchst du keine Root-Rechte zum Debuggen. Als root sollte man nur eingeloggt sein, wenn man irgendwelche administrativen Tasks am System durchführen muss. Per Default als root arbeiten ist ein Sicherheitsrisiko und kann gerade beim Debugging auch mal zur Instabilität des Systems führen.
 
DankeDankeDankeDankeDanke!!!!! Jetzt gehts.

Wie meinst du dass? Ich benütze im moment BackTrack als Betriebssystem, und da kann man soviel ich weiss nur mit root eingeloggt sein.
 
Und Benutzer legt man dort auch über folgenden Befehl an:
Code:
Compilerjunge123:~ # useradd $BENUTZERNAME
 
Zurück
Oben