Hallo, ich verwende uVision und will im Watch 1 fenster eine lokale Variable Tracen. Wenn ich den Debugger starte, steht da immer "<cannot evaluate>". Definiere ich die Variable Global, zeigt er mir den wert an und der ändert sich auch entsprechend dem programm.... Hat jemand ne idee wie ich die Lokale Variable zum laufen bring?? mfg
next schrieb: > Hallo, > ich verwende uVision und will im Watch 1 fenster eine lokale Variable > Tracen. Wenn ich den Debugger starte, steht da immer "<cannot > evaluate>". lokale Variablen werden 'geboren' sobald eine Funktion betreten wird. Startest du einen Debugger, dann beginnt die Ausführung am Anfang und erst dann, wenn die Programmausführung IN die Funktion hineinläuft, erst dann existiert diese Variable. Es gibt sie weder vor dem Funktionsaufruf, noch nachdem die Funktion beendet wurde.
demnach geht es nur wenn ich sie global laufen lass.... danke :-)
next schrieb: > demnach geht es nur wenn ich sie global laufen lass... Das hab ich nicht gesagt. Aber die Frage erhebt sich: Wozu brauchst du ausserhalb einer Funktion einen Watch auf eine funktionslokale Variable? Die Variable ist doch sowieso nur innerhalb der Funktion interessant. Deswegen ist sie ja funktionslokal. Einen Breakpoint auf den Anfang deiner FUnktion und wenn der anspringt, wird dein Debugger die Fehlermeldung mit dem aktuellen Wert der Variablen ersetzen.
ich verwende im moment ein Demoboard zum Debuggen und habe keine weitere Perepherie ausen dran. Die variable enthält die Temperatur des µC Core´s im rohen ADC Wert. Ich würde eben im laufenden betrieb gerne die Werte sehen um zu sehen wie sehr er z.b. schwankt. wenn ich den breakpoint kurz hinter das befüllen der Variable setzte sehe ich den Wert ja nur wenn ich im Debug ohne Breakpoint laufen lasse zeigt er garnix an.
Lokal definierte Variablen werden oft vom Compiler, in anderen Funktionen wiederverwendet. Dies bedeutet: Es gibt sie tatsächlich nicht mehr, bzw. ihr Speicherplatz wird anderweitig verwendet. Nur wenn Du die Speicherstelle explizit außerhalb definierst kannst du auch von dort aus darauf zugreifen.
Karl Heinz Buchegger schrieb: > Einen Breakpoint auf den Anfang deiner FUnktion und wenn > der anspringt, wird dein Debugger die Fehlermeldung mit dem aktuellen > Wert der Variablen ersetzen. ... aber nur, wenn die Variable von Anfang bis Ende in der Funktion auch benötigt wird. Nach meinen Beobachtungen werden lokale Variablen meistens (immer?) in Registern gehalten. Sobald die Variable im weiteren Verlauf in der Funktion nicht mehr verwendet wird, wird aber möglicherweise das Register weiterbenutzt. Das bringt den Debugger aus dem Konzept ;-) Gehört dort nicht hin, aber: Wenn man die Variable mal ausnahmsweise zu Testzwecken als 'volatile' deklariert, wird auch eine Speicherstelle dafür angelegt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.