input für gdb

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
d3f3nd3r
Beiträge: 177
Registriert: 06.03.2007 15:39:16
Kontaktdaten:

input für gdb

Beitrag von d3f3nd3r » 07.09.2007 23:57:37

heo

also ich würde gerne meine programme mit gdb dbuggen aber bin schon fast am verzweifeln, da ich keinen plan habe, mit was für einer datei als argument ich gdb aufrufen solll.....
hab schon diverse inet seiten durchforstet doch nirgendsd habe ich eine funktionierende lösung gefunden.....

also ich compiliere die cpp datei mit

Code: Alles auswählen

g++ -g -o test test.cpp 
dann wird eine ausführbare datei test erstellt, dich ich mit ./test auch ausführen kann.

diese datei hab ich für die "executable" gehalten die man gdb übergibt aber :

Code: Alles auswählen

d3f3nd3r@debian-stable:~/Desktop/test1$ gdb test
GNU gdb 6.4.90-debian
Copyright (C) 2006 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-linux-gnu"...BFD: /home/d3f3nd3r/Desktop/test1/test: don't know how to handle OS specific section `.gnu.hash' [0x6ffffff6]
"/home/d3f3nd3r/Desktop/test1/test": not in executable format: File format not recognized

(gdb) 
anscheinend doch nicht..

kann mir wer helfen, hab keinen plan mehr.....

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.09.2007 00:22:06

eigentlich sollte das auch so funktionieren. So schauts bei mir aus:

Code: Alles auswählen

gms1 ~ # echo "main(){}">test.cpp
gms1 ~ # g++ -g -o test test.cpp
gms1 ~ # gdb test
GNU gdb 6.6
Copyright (C) 2006 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-pc-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) r
Starting program: /root/test

Program exited normally.
(gdb) q
gms1 ~ #   
überprüfe einmal, ob dein erzeugtes Programm ein 64 bit Programm ist:

Code: Alles auswählen

gms1 ~ # file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped
gms1 ~ #  
Ich vermute momentan, daß bei dir ein 32 bit Programm erzeugt wird, und deine doch schon ältere gdb 64 bit Version damit nicht zurecht kommt. Vielleicht etwas spekulativ diese Vermutung, aber was besseres fällt mir jetzt dazu auch nicht ein.

Gruß
gms

d3f3nd3r
Beiträge: 177
Registriert: 06.03.2007 15:39:16
Kontaktdaten:

Beitrag von d3f3nd3r » 08.09.2007 12:03:55

also

Code: Alles auswählen

file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), not stripped
hätte mich auch gewundert, wenn g++ auf 64bit systemen standardmäßig 32 bit executable erstellen würde.

aber ich hab mir die neuste version von gdb compiliert (6.6 statt 6.4 ) und jetzt funktionierst, keine ahnung warum.^

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.09.2007 17:47:20

d3f3nd3r hat geschrieben:hätte mich auch gewundert, wenn g++ auf 64bit systemen standardmäßig 32 bit executable erstellen würde.
generell ist das überhaupt nicht verwunderlich:
auf SunOS 5.10 / Sparc:

Code: Alles auswählen

gms@gmssun1:~$ echo "main(){}">test.cpp
gms@gmssun1:~$ g++ -o test test.cpp
gms@gmssun1:~$ ./test
gms@gmssun1:~$ file test
test:           ELF 32-Bit MSB ausführbar SPARC Version 1, über dynamischen Link verknüpft, nicht entfernt, keine Fehlersucheinformationen verfügbar.
gms@gmssun1:~$ g++ -o test test.cpp -m64
gms@gmssun1:~$ file test
test:           ELF 64-Bit MSB ausführbar SPARCV9 Version 1, über dynamischen Link verknüpft, nicht entfernt, keine Fehlersucheinformationen verfügbar.
gms@gmssun1:~$                                                        
auf AIX 5.2 / powerpc

Code: Alles auswählen

gms@gmsaix1:~$ echo "main(){}">test.cpp
gms@gmsaix1:~$ g++ -o test test.cpp
gms@gmsaix1:~$ file test
test: executable (RISC System/6000) or object module not stripped
gms@gmsaix1:~$ g++ -o test test.cpp -maix64
gms@gmsaix1:~$ file test
test: 64-bit XCOFF executable or object module not stripped
aber unter Linux/x86_64 hast du natürlich recht

Gruß
gms

Antworten