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!!
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?
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.
Blöd ist auch, dass nicht mal Variablen in Registern angezeigt werden. Zumindest dass sollte doch möglich sein, oder?
>> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.