[Erledigt / bekannter Bug] Frage zu GDB

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

[Erledigt / bekannter Bug] Frage zu GDB

Beitrag von schorsch_76 » 01.11.2011 17:33:32

Hallo Leute,
momentan macht mich der gdb ganz wirr.

Folgendes Miniprogramm in C++:

Code: Alles auswählen

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 struct Dummy
 6 {
 7     Dummy() {}
 8     ~Dummy() {}
 9 };
10 
11 int main()
12 {
13     Dummy d1;
14     cout << "Hello world!" << endl;
15     Dummy d2;
16     cout << "Bye world!" << endl;
17 
18     return 0;
19 }
das starte ich mit dem gdb

Code: Alles auswählen

gdb GDBTest
wenn ich das Programm durchsteppe mit "next" kommt das folgende dabei raus:

Code: Alles auswählen

Starting program: /home/georg/Dokumente/Entwicklung/GDBTest/bin/Debug/GDBTest 

Breakpoint 1, main () at /home/georg/Dokumente/Entwicklung/GDBTest/main.cpp:13
13	    Dummy d1;
(gdb) n
14	    cout << "Hello world!" << endl;
(gdb) n
Hello world!
15	    Dummy d2;
(gdb) n
16	    cout << "Bye world!" << endl;
(gdb) n
Bye world!
18	    return 0;
(gdb) n
15	    Dummy d2;
(gdb) n
13	    Dummy d1;
(gdb) n
19	}
(gdb) 
Der gdb springt beim Abbau der Funktion main rückwärts über die Destruktoren der Dummy Objekte. Das ist so zwar korrekt (vom C++ Standard her), nur verwirrt mich das, da ich das unter M$ Visual Studio anderst gewohnt bin.

Gibt es eine Option um das in der gdbinit abzustellen? Bin in der Doku [1] bisher nicht fündig geworden.

Achja: Das main.gpp wurde mit folgender Zeile übersetzt:

Code: Alles auswählen

g++ -Wall -fexceptions  -g     -c /home/georg/Dokumente/Entwicklung/GDBTest/main.cpp -o obj/Debug/main.o
g++  -o bin/Debug/GDBTest obj/Debug/main.o 
System:
  1. Wheezy amd64
  2. gcc: 4.6
  3. gdb: 7.3
Gruß
schorsch

[1] http://sourceware.org/gdb/current/onlinedocs/gdb/
Zuletzt geändert von schorsch_76 am 02.11.2011 07:33:11, insgesamt 1-mal geändert.

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Frage zu GDB

Beitrag von bmario » 01.11.2011 20:41:40

Die Reihenfolge der Destruktoren legt nicht GDB fest, sondern der Compiler.

Also wenn, dann wirst du beim g++ da fündig. Aber ich bezweifle, dass man das einstellen könnte, zumal es wie du sagt nicht Standardkonform ist.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu GDB

Beitrag von schorsch_76 » 01.11.2011 21:22:56

Danke bmmario! Hab bisher in eine VM ein Standard squeeze installiert. Dort war alles so wie gewohnt, d.h. die Zeilen "gingen nicht wieder nach oben". 12/13/14/15/16/17. Nachdem ich ein Upgrade auf wheezy gemacht hatte, das Testprogramm neu übersetzt, gings wieder 12/13/14/15/16/14/12.

Also scheint es am gdb bzw. am gcc zu liegen.

Gruß
schorsch

EDIT: Nach einigen Tests bin ich drauf gekommen, dass dies beim Wechsel von g++-4.4 auf g++-4.5 passiert ist. Jetzt mal changelog kucken :-)

EDIT2:
Bug gefunden
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49951

Antworten