AW: AW: Frage zu dwarf und dwarf-2 (fwd)
Hallo, danke für deine Hilfe. Es hat eine Weile gedauert bis ich mir einen (nicht-) funktionierenden Testfall zusammengebaut hatte :-) Hier meine kleine Hauptroutine: #include <iostream> extern double wilfrid; double wilfrid; main() { wilfrid = 7; std::cout << "Mein Test \n" ; std::cout << "Wert " << wilfrid << "\n"; } Übersetzen tu ich dann das ganze mit folgendem Aufruf: g++ -gdwarf-2 test.cpp -o test Die debug info hole ich mir dann mit folgendem Aufruf: readelf -w test > test.txt Kommentiere ich nun die (unnötige) Zeile mit dem extern aus, bekomme ich in der debug info u.a. folgende Ausgabe: <1><13e3>: Abbrev Number: 60 (DW_TAG_variable) DW_AT_name : (indirect string, offset: 0xb1b): wilfrid DW_AT_decl_file : 1 DW_AT_decl_line : 7 DW_AT_type : <eac> DW_AT_external : 1 DW_AT_location : 5 byte block: 3 0 9b 4 8 (DW_OP_addr: 8049b00) Nehme ich die Zeile mit dem extern Verweis mit, erhalte ich über die Variable wilfrid keine Ausgabe. So, dass ist jetzt mein Problem. Ich weiss, dass die Zeile mit dem extern in diesem Beispiel nicht notwendig ist. Bei dem Code den ich habe, braucht man wohl aber einen entsprechenden Verweis (der Code ist leider nicht von mir, darum kann ich nichts genaueres dazu sagen). Mit dem gcc 2.95-3 hat er in beiden Fällen (mit und ohne extern) die entsprechende debug info geschrieben. Mit dem gcc 3.3.1 leider nicht mehr. Was denkst du sollte ich auf den gcc 3.3.3 umsteigen? Gibt es irgendeinen Schalter, um ihn wieder zu der Ausgabe zu "bewegen"? Danke schon mal. gruss Wilfrid PS: Sorry, dass ich in der letzten mail ausversehen nicht an die liste geantwortet habe. -----Ursprüngliche Nachricht----- Von: Michael Matz [mailto:matz@suse.de] Gesendet: Mittwoch, 23. Juni 2004 16:35 An: suse-programming@suse.com Betreff: Re: AW: Frage zu dwarf und dwarf-2 (fwd) Hi, [... hab ich doch glatt die falsche Liste CC'ed ...] On Wed, 23 Jun 2004, Eberhard Wilfrid ZFF TE-PR wrote: bitte antworte an die gesamte Liste.
Bei dieser Option bekomme ich jetzt allerding die Adressen von z.B. Strukturen nicht mehr in der Debug Info.
Keine Ahnung was du damit sagen willst. Nur Variablen haben Addressen, und die tauchen in den debug infos auch auf.
Sorry ich wollte eigentlich sagen, dass ich die Adressen von Instanzen einer Klasse nicht mehr bekomme.
Ich weiss immer noch nicht, was du meinst. In welcher Weise bekommst du keine Addressen mehr? Wo erwartest du diese, und wie stellst du fest, dass du keine "hast"? Im gdb, oder wie? Oder parst du selbst dwarf2? Usw. Ein Testprogramm und erwartetes Verhalten wuerden helfen. Ciao, Micha. -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Eberhard Wilfrid ZFF TE-PR wrote:
Hallo,
danke für deine Hilfe.
Es hat eine Weile gedauert bis ich mir einen (nicht-) funktionierenden Testfall zusammengebaut hatte :-)
Hier meine kleine Hauptroutine:
ich hab die zum Spass mal übersetzt: $ g++ -v [...] gcc-Version 3.3.4 (Debian) und einer glibc-2.3.2 mit GNU C 3.3.3 (Debian 20040401) übersetzt
Kommentiere ich nun die (unnötige) Zeile mit dem extern aus, bekomme ich in der debug info u.a. folgende Ausgabe:
Nehme ich die Zeile mit dem extern Verweis mit, erhalte ich über die Variable wilfrid keine Ausgabe.
hier kein Unterschied, ein Diff liefert 'leider' keine Unterschiede zwischen den beiden Ausgaben
-----Ursprüngliche Nachricht-----
[TOFU umweltgerecht entsorgt!] bitte kein Tofu... Gruss Andreas
Hi, On Fri, 25 Jun 2004, Eberhard Wilfrid ZFF TE-PR wrote:
Übersetzen tu ich dann das ganze mit folgendem Aufruf:
g++ -gdwarf-2 test.cpp -o test
Die debug info hole ich mir dann mit folgendem Aufruf:
readelf -w test > test.txt
Hmm, scheint Tatsache ein Bug zu sein. Er passiert bloss im C++ Compiler (i.e. der C compiler aendert sein Verhalten nicht je nach Existenz von 'extern' oder nicht). Unser gcc der 9.1 dieses Verhalten. Die hammer-branch (auf der dieser Compiler basiert) allerdings nicht mehr. 3.3.4 auch nicht. Es wurde also nach 3.3.3 gefixt.
Was denkst du sollte ich auf den gcc 3.3.3 umsteigen?
S.o. wuerde nix helfen. Dur brauchst mind. was 3.3.4 aehnliches.
Gibt es irgendeinen Schalter, um ihn wieder zu der Ausgabe zu "bewegen"?
Ich glaube nicht, nein. Ciao, Micha.
participants (3)
-
Andreas Loesch
-
Eberhard Wilfrid ZFF TE-PR
-
Michael Matz