Debugging lokaler Variablen in C++ Programmen
-
Ich habe folgendens Problem beim Debugging von C++ Programmen. Ich kann mir zwar die Inhalte der Variablen anzeigen lassen, die Mitglieder der Klasse sind also z.B. unter "public:" oder "private:" in der Headerdatei vereinbart wurden.
Die Werte der Variablen, die lokal nur in den Methoden vereinbart wurden, kann ich mir nicht anzeigen lassen. Egal ob mit KDevelop unter Linux, mit CODE::Blocks unter Windows oder direkt mit dem GDB unter Windows oder Linux. Das Gleiche Problem besteht beim DDD und KDBG unter Linux. Dabei tritt sinngemäß die Meldung auf, daß die Variable nicht zum aktuellem Kontext paßt. Ich verstehe das so, daß man sich außerhalb des Gültigkeitsbereiches der Variable befindet. Wenn ich mich allerdings beim Debugging in einer Methode befinde, müßte ich mir doch auch Variablenwerte von Variablen ansehen können, die in dieser Methode vereinbart wurden. Unter MS Visual C++ funktioniert das jedenfalls.
Die Option -g wird beim übersetzen der Programme angegeben, sonst könnte ich mir ja auch nicht die Inhalte der klassenweit vereinbarten Variablen ansehen. Ein weiterer Parameter ist -O0, um die Optimierung auszuschalten und so ein zeilenweises Debugging zu ermöglichen.
Was mache ich falsch, oder ist das grundsätzlich mit den Linux-Debuggern nicht möglich?
Tschau und Danke Sven!
-
OK, ich habe eine Möglichkeit gefunden, in Methoden vereinbarte Variablen zu debuggen. In der 1.Quellcodeversion konnte ich mir den Inhalt der Variable i
im Kdbg nicht anzeigen lassen (i nicht im aktuellen Kontext).1.Quellcodeversion:
void Klasse::Methode(void) { int i; try { //Code } catch(...) { //Code } }
2.Quellcodeversion:
void Klasse::Methode(void) { try { int i; //Code } catch(...) { //Code } }
Mit der 2.Quellcodeversion kann ich mir den Inhalt von i im Kdbg ansehen, allerdings ist mir die Ursache nicht klar. Denn in der ersten Version sollte i in der ganzen Methode einschließlich untergeordneter Verschachtelungen (try...catch) gültig sein. Warum ist die 2.Version notwendig um i zu debuggen?
-
In beiden Versionen läßt sich das Programm übersetzen, und es arbeitet in beiden Versionen auch korrekt. Es ist nur der Debugger, der mit der 1.Version ein Problem hat.
Im nachfolgenden Beispiel kann ich zwar i aber nicht result debuggen. result
muß aber oberhalb von try vereinbart werden, damit es als Rückgabewert dienen kann. wie kann man result debuggen?int Klasse::Methode(void) { int result; try { int i; //Code } catch(...) { //Code } return(result); }
-
Dieser Thread wurde von Moderator/in GPC aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.