www.mikrocontroller.net

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


Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder Optimierung deaktivieren

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fragender (Gast)
Datum:

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

Autor: weißgradnich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal schnell eine einzelne Variable als "volatile" deklarieren, ist
durchaus oft hilfreich.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.