„Ich möchte wissen, was ich erwarten kann“
Ich verwende C++ (meist GCC auf vxWorks) in eingebetteten Systemen seit mehr als 2 Jahrzehnten. Ich habe großen Respekt vor den Compiler-Autoren.
Vertrauen Sie Ihrem Compiler: IMHO hat O3 nie Code gebrochen ... hat aber bei Gelegenheit ergab interessante Codierungsfehler.
wählen: Teams müssen sich entscheiden, ob nicht zu „versenden, was Sie testen und testen, was Sie versenden“, unabhängig von -O1 oder O3 Wahl. Die Teams, mit denen ich gearbeitet habe, haben sich immer dazu verpflichtet, mit -O3 zu versenden und zu testen.
Single Step kann un-kooperativ sein: Auf eine persönliche Praxis Ebene, wenn O3-Code, ich in der Regel einzigen Schritt 'verlassen' gdb. Ich verwende viel mehr Breakpoints, und es gibt geringfügige Variationen in den Codierungsoptionen, um automatische Variablen (Stapeldaten) und Klassendaten "sichtbarer" zu machen. (Du kannst den gdb-Befehl 'p' für deinen unbequemen Freund machen).
Einzel Schritt ist notwendig: Bitte beachten Sie, dass, obwohl wir „Test und Schiff“ d O3 mit, wir fast ausschließlich -O1 Code debuggt werden.
Debug ist necesary: Der Kompromiss zwischen Debuggen -01 noch testen und Versand O3 ist die zusätzliche Wieder compiles benötigt, um die beiden ausführbaren Dateien zu wechseln. Die Zeit, die in -O1 gespeichert wurde, um die Code-Bugs zu untersuchen, zu identifizieren und zu beheben, muss die zwei Neuerstellungen ausmachen (bis -01 und zurück zu -O3).
Regression Test Automation: Ich möchte Systeme Test sagen (auch bekannt als Integrationstest oder Regressionstest) von O3 es zu Schritt hat eine Kerbe, aber ich kann es nicht wirklich beschreiben ... vielleicht sollte ich empfehlen, dass das Niveau der Testautomatisierung höher ist (jeder REGURIONSTEST!). Aber ich bin mir nicht sicher. Die Automatisierungsebene des Regressionstests korreliert wahrscheinlich eher mit der Teamgröße als mit dem Leistungsniveau.
Ein "erfolgreiches" eingebettetes System macht 2 Dinge. Es erfüllt die Anforderungen. Und, was noch wichtiger ist, in allem menschlichen sichtbaren Verhalten verhält es sich wie ein leicht belasteter Desktop. Für jede Aktion (Knopfdruck, Kabeltrennung, Testgerät-induzierter Fehler oder sogar eine geringe Statuslichtänderung) haben die Ergebnisse keine vom Menschen wahrnehmbare Verzögerung. -O3 hilft. Ein erfolgreiches System kann getan werden ... Ich habe es gesehen.
Ich denke, es ist ein Fall von -O2 hat viel mehr Laufleistung als -O3. Ich würde empfehlen, dass Sie sicherstellen, dass Sie die Binärdateien testen ... –
Sie sollten alle Ihre Binärdateien sowieso testen ... –
@dwelch Sie haben Recht. Nachdem ich das über die Tests geschrieben hatte, wurde mir klar, dass ich es nicht testen konnte, bevor es kompiliert wurde. Ich denke, ich bin es gewohnt, Sprachtests zu schreiben, bei denen ich der öffentlichen Schnittstelle ausweichen kann. –