Hallo allerseits gibt es eine Möglichkeit valgrind so zu starten, daß wann immer valgrind einen Zugriff auf eine undefinierte Variable anmeckert, GDB gestartet wird und genau an dieser "Stelle" "stehenbleibt"? Oder gibt's noch andere Möglichkeiten (z.B. innerhalb des GDB) Zurgiffe auf undefinierte variablen zu entdecken. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Dr. Jürgen Vollmer wrote:
gibt es eine Möglichkeit valgrind so zu starten, daß wann immer valgrind einen Zugriff auf eine undefinierte Variable anmeckert, GDB gestartet wird und genau an dieser "Stelle" "stehenbleibt"?
Mit "undefiniert" meinst Du wohl "uninitialisiert", oder? Valgrind sollte Dir genau die entsprechende Stelle im Code angeben koennen, vorausgesetzt, Du compilierst mit -O0 (also ohne Optimierung). Ansonsten sind die Angaben durch valgrind ungenau. Beispiel (die Variable "i" ist hier uninitialisiert): vtest.cpp: #include <iostream> int main(void) { int i; std::cout << "i = " << i << std::endl; return(0); } $> g++ -O0 -g vtest.cpp $> valgrind a.out ==6586== Memcheck, a memory error detector. [...] ==6586== ==6586== Use of uninitialised value of size 4 [...] ==6586== by 0x8048714: main (vtest.cpp:4) Um einen gdb Prozess zu starten, musst Du valgrind mit der Option "--db-attach=yes" aufrufen. Standard ist hier "no". Wie gdb aufgerufen werden soll, kannst Du ebenfalls selbst angeben ueber weitere Optionen.
[...] Oder gibt's noch andere Möglichkeiten (z.B. innerhalb des GDB) Zurgiffe auf undefinierte variablen zu entdecken.
GCC sollte das in gewissem Umfang koennen. Dazu muss allerdings explizit die Option "-Wuninitialized" gesetzt werden, ausserdem muss hier im Gegensatz zu valgrind oben die Optimierung mindestens -O1 sein. Hier ein Beispiel der Compilierung ohne die Option und mit der Option: $> g++ -O2 vtest.cpp $> a.out i = -1209532428 $> g++ -O2 -Wuninitialized vtest.cpp vtest.cpp: In function ‘int main()’: vtest.cpp:3: warning: ‘i’ is used uninitialized in this function $> HTH, Thomson PS: Du kennst die suse-programming Mailingliste?
Hallo Thomas, Am Mittwoch, 15. März 2006 20:37 schrieb Thomas Hertweck:
Dr. Jürgen Vollmer wrote:
gibt es eine Möglichkeit valgrind so zu starten, daß wann immer valgrind einen Zugriff auf eine undefinierte Variable anmeckert, GDB gestartet wird und genau an dieser "Stelle" "stehenbleibt"?
Mit "undefiniert" meinst Du wohl "uninitialisiert", oder? jup.
Valgrind sollte Dir genau die entsprechende Stelle im Code angeben koennen, vorausgesetzt, Um einen gdb Prozess zu starten, musst Du valgrind mit der Option "--db-attach=yes" aufrufen. Standard ist hier "no". Wie gdb aufgerufen werden soll, kannst Du ebenfalls selbst angeben ueber weitere Optionen.
aaah, das ist was ich gesucht habe. Oh man, das steht sogar in der man-page. Typischer Fall von "Wald vor lauter Bäumen....")
[...] Oder gibt's noch andere Möglichkeiten (z.B. innerhalb des GDB) Zurgiffe auf undefinierte variablen zu entdecken.
GCC sollte das in gewissem Umfang koennen. Dazu muss allerdings explizit die Option "-Wuninitialized" gesetzt werden, ausserdem muss hier im Gegensatz zu valgrind oben die Optimierung mindestens -O1 sein. Hier ein Beispiel der Compilierung ohne die Option und mit der Option:
nun ja, das Problem trat in dynamisch allokierten Speicher auf...
PS: Du kennst die suse-programming Mailingliste? nein, es ist ja auch kein SuSE spezifisches Problem...
Danke für den --db-attach=yes - Hinweis! Bye Jürghen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
* Dr. Jürgen Vollmer (Juergen.Vollmer@informatik-vollmer.de) [20060316 13:00]:
Am Mittwoch, 15. März 2006 20:37 schrieb Thomas Hertweck:
PS: Du kennst die suse-programming Mailingliste? nein, es ist ja auch kein SuSE spezifisches Problem...
Naja, suse-programming ist nicht unbedingt für SUSE-spezifisches. Und da Du dort vor allem Programmierer findest, ist die Whrscheinlichkeit, Hilfe für Entwicklungs- bzw. Debugging-Tools zu bekommen, deutlich höher als hier. Philipp -- Anything whose specification is too complicated to explain easily probably needs to be redesigned. David Abrahams on boost
participants (3)
-
Dr. Jürgen Vollmer
-
Philipp Thomas
-
Thomas Hertweck