Forum: Mikrocontroller und Digitale Elektronik Debuggen von Code, der mit Optimizer compiliert wurde


von noips (Gast)


Lesenswert?

Hallo zusammen!

Ich stoße schon mehrmals auf das Problem, dass beim dem Code, der mit 
aktiviertem Optimizer compileirt wurde, sich einige Variablen beim 
Debuggen gar nicht anzeigen lassen. Die werden wohl vom Compiler 
wegoptimiert worden sein.

Manche Variablen braucht man aber zum Debuggen. Z.B. eine Laufvariable 
in einer for-Schleife, um zu Wissen bei wie vieltem Durchlauf etwas 
eintritt. Was macht man denn in einem solchen Fall? Ist volatile hier 
die einzige Lösung?

Danke!!

von Stefan (Gast)


Lesenswert?

Oder Optimierung deaktivieren

von noips (Gast)


Lesenswert?

Aber ich habe hier schon in einem Thread gelesen, dass man die 
Optimierung schon einsetzen sollte!

Oder meinst du, zum Debuggen Optimierung deaktivieren und wenn der Code 
schon "fehlerfrei" ist, die Optimierung wieder aktivieren?

von Karl H. (kbuchegg)


Lesenswert?

Das ist natürlich schon ein Problem.
Auf der einen Seite kann Debuggen von optimiertem Code frustrierend sein 
- Debuggen von optimiertem Code kann so zu Stress ausarten. Auf der 
anderen Seite deckt der Optmizer so manchen Programmfehler auf, der ohne 
Optimizer nicht existiert, bzw. sich nicht auswirkt.

Man kann zb so vorgehen: Entwickeln ohne Optimizer. Im Debugger kann man 
sich Abläufe ansehen, Variablen verfolgen. Dann wird der Optimizer 
zugeschaltet. Verhält sich dann das Programm anders, so hat man irgendwo 
gegen eine C-Regel verstossen, die vom Optimizer gnadenlos ausgenutzt 
wird. Man kann jetzt versuchen, den optimierten Code im Debugger nur im 
Hinblick darauf zu untersuchen. Dazu gehören Variablen ansehen, sofern 
sie nicht entfernt wurden, aber der Optimizer ist an dieser Stelle oft 
eher nutzlos geworden. Hier muss man dann auf andere Debugmöglichkeiten 
wie strategische Ausgaben, Leds die aufleuchten, etc. zurückgreifen und 
den Rest per Umkehrschluss und erhöhtem Einsatz der grauen Zellen 
erledigen.
Das geht aber nur dann, wenn das Verfahren prinzipiell schon ausgetestet 
und für gut befunden wurde. Dazu benötigt es aber den Optimizer meistens 
nicht.

Es empfiehlt sich auch während der Entwicklungsarbeit immer wieder mal 
zur Optimizer Variante zu schalten und den Code dort zu testen und 
gefundenen Ungereimtheiten sofort nachzugehen. Je länger man das 
hinauszögert, umso mehr Code hat man dann, der ein potentieller 
Übeltäter sein kann.

von fragender (Gast)


Lesenswert?

Blöd ist auch, dass nicht mal Variablen in Registern angezeigt werden. 
Zumindest dass sollte doch möglich sein, oder?

von weißgradnich (Gast)


Lesenswert?

>> Blöd ist auch, dass nicht mal Variablen in Registern angezeigt werden.
>> Zumindest dass sollte doch möglich sein, oder?

Dazu ist oft ein Blick im ASM-Listing hilfreich.

mfg

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mal schnell eine einzelne Variable als "volatile" deklarieren, ist
durchaus oft hilfreich.

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
Noch kein Account? Hier anmelden.