> Warum wird die Zeile "b = b + a;" nicht abgearbeitet ?
Sie wird abgearbeitet, d.h. der Compiler erzeugt Code, der exakt der C-Spezifikation von "b = b + a" entspricht! Wenn er zB nachweisen kann, daß a = 0 ist und weder a noch b volatile sind, braucht er dafür überhaupt keinen Code zu erzeugen. Eine Addition ist auch unnötig, wenn b vor der Addition 0 ist oder b nach der Addition nicht verwendet wird.
Das Problem in deinem Fall ist aber nicht der erzeugte ausführbare Code, sondern die erzeugte Debug-Information bzw. deren Auswertung.
Zeitgemäße Debugger beziehen Informationen über den Code aus der Debug-Info, nicht etwa aus den vorliegenden Maschineninstruktionen. In letzerem sind nämlich keine Variablennamen, Typen, Typedefs, Quellbezüge, etc. mehr enthalten.
Ergo: Wenn diese Zeile oder Variablen nicht angezeigt werden, dann hast du:
Und nochwas: Beim der Fehlersuche sollte immer der Code untersucht werden, der schlussendlich auch zum Einsatz kommt!
- Ein altes bzw. unzureichendes Debug-Format ausgewählt. Um die Anzeige optimierten Codes zu unterstützen, sollte mindestens DWARF-3, besser noch DWARF-4, verwendet werden. Die entsprechende GCC-Optionen zur Erzeugung dieser Debug-Formate lauten -gdwarf-3 bzw. -gdwarf-4
- Selbstredend muss der Debugger mit den Debug-Infos zurecht kommen. Wenn irgendwas hakt, sind die Tools, also Compiler und/oder Debugger, veraltet.
Ansonsten kann es schnell passieren, daß man einem Phantom hinterher jagt und es nach Anschalten der Optimierung plötzlich "seltsame, unerklärliche Effekte" gibt, die dann als "Compilerfehler" verbucht werden, in 99.9% der Fälle jedoch Anwendungsfehler bzw. Missachten der C-Spezifikation etc. sind.
Also: Den richtigen Code debuggen, nicht irgendein Mächen-Code.
Lesezeichen