を
を「私は何を期待できるか知りたいのですが」
私は20年以上にわたり組み込みシステムでC++(主にvxWorksのGCC)を使用してきました。私はコンパイラ作家に敬意を表します。
トラストコンパイラ:IMHO、-O3は、任意のコードが破損したことがない...しかし、時々、面白いコーディングエラーを明らかにしました。
選択:チームは関係なく、-O1または-O3最適な、「あなたは何をテスト出荷、そしてあなたが出荷するかをテスト」するかどうかないを選択する必要があります。私が協力してくれたチームは、常に-O3で出荷してテストすることを約束してきました。
シングル・ステップは、非協力的になります-O3コードを使用した場合、個人練習のレベルでは、私は通常、GDB単一のステップを「放棄します」。私はブレークポイントをもっと活用し、自動変数(スタックデータ)とクラスデータをもっと「可視」にするために、コーディングの選択肢に多少の違いがあります。 (あなたはgdbコマンドをあなたの不便な友人 'p'にすることができます)。
シングル・ステップが必要です。でも、-O3を使用して、私たちの「テストと船」Dかかわらず、我々がほぼ独占的-O1コードを使用してデバッグますのでご注意ください。
デバッグがNecesaryです:デバッグとの間のトレードオフ-01まだテストおよび-O3を出荷するには2つの実行を切り替えるために必要な追加の再コンパイルです。コードバグを探索、識別、修正するために-O1に保存された時間は、2回の再構築(-01まで、そして-O3まで)を補う必要があります。
回帰テストの自動化は:おそらく、私がすべき...私は-O3の(統合テストや回帰テスト別名)システムテストはノッチそれをステップアップしていると言いたいが、私は本当にそれを記述することはできませんテストの自動化のレベルを高くすることをお勧めします(1回の退治テストごとに!)。確信はないけど。回帰テストの自動化レベルは、おそらくパフォーマンスレベルではなくチームサイズに関連しています。
「成功した」組み込みシステムは2つのことを行います。それは要件を満たす。さらに重要なのは、人間の目に見えるすべての動作において、軽く読み込まれたデスクトップのように機能することです。何らかのアクション(ボタン押下、ケーブル切断、テスト装置誘発エラー、またはステータスライトの変化が軽微であっても)は、人間の知覚可能な遅延はありません。 -O3が役に立ちます。成功したシステムができます...私はそれを見ました。
-O2の場合は、-O3よりも多くのマイレージがあると思います。バイナリをテストすることをお勧めします... –
とにかくすべてのバイナリをテストする必要があります。 –
@dwelchそうです。私はテストについて書いた後、コンパイルする前にテストすることができないことに気付きました。私はパブリックインターフェイスを回避できる言語テストのスクリプトに慣れていると思います。 –