8

非 POSIX 組み込みシステム用のプロジェクトを作成しているため、gcc オプション --coverage を使用できません (読み取りも書き込みもありません)。gcov のような出力を生成するために他に何ができますか。私は出力機能を持っています。

4

4 に答える 4

9

これは、トレースが埋め込まれたプロセッサ、トレース ポートを公開するボード設計、および適切なハードウェア デバッガと関連ソフトウェアによって最も簡単に実行できます。たとえば、多くの Cortex-M ベースのデバイスには ARM の組み込みトレース マクロセル (ETM) が含まれており、これは Keil の uVision IDE および ULINK-Pro デバッガーによってサポートされ、コード カバレッジ、命令/ソース レベルのトレース、およびリアルタイム プロファイリングを提供します。ハードウェア トレースには、邪魔にならないという利点があります。コードはリアルタイムで実行されます。

ハードウェア サポートがない場合は、シミュレーションに頼らなければならない場合があります。多くのツール チェーンには、トレース、コード カバレッジ、およびプロファイリングを実行する命令レベルのシミュレーターが含まれていますが、ハードウェアをシミュレートしてすべてのパスの実行を強制するために、デバッグ スクリプトまたはコード スタブを作成する必要がある場合があります。

3 番目の方法は、デスクトップ プラットフォームでコードをビルドしてスタブを使用し、ターゲット ハードウェアの依存関係を置き換え、それに対してテストとコード カバレッジを実行することです。ターゲット C コンパイラとテスト システム コンパイラの両方が同じセマンティクスでソースを変換することを信頼する必要があります。ここでの利点は、使用可能なデバッグ ツールが組み込みシステムで使用できるものよりも優れていることが多いことです。また、ハードウェアが利用可能になる前にコードの多くをテストでき、ほとんどの場合、コードをはるかに高速に実行できるため、より広範なテストが可能になる可能性があります。

POSIX API がないからといって、GCC の使用が妨げられるわけではありません。GNU C ライブラリの使用が妨げられるだけです。POSIX を使用しない組み込みシステムでは、Newlib などの代替 C ライブラリが使用されます。Newlib には、I/O と基本的なヒープ管理が実装されているシステム ポーティング レイヤーがあります。

于 2011-12-20T19:37:51.570 に答える
2

免責事項: 私が勤務する会社 (Rapita Systems) は、組み込みアプリケーション向けのコード カバレッジ ソリューションを提供しています。

組み込みシステムには、独自の特殊で広く多様な要件があるため、コード カバレッジの「最適な」ソリューションも大きく異なります。

  • ETM または NEXUS 対応パーツを備えた ARM チップなどのトレースベースのデバイスがある場合は、デバッガーを介してインストルメンテーションなしでカバレッジを実行できます。
  • そうしないと、インストルメンテーション ベースのソリューションに直面する可能性が高くなります。
    • RAM が制限されたソリューションの場合、I/O ポートにインストルメンテーションを書き込むことをお勧めします。
    • または、インストルメンテーションを RAM バッファーに記録し、さまざまな手段を使用してこれをターゲットから抽出することもできます。

もちろん、関数、ステートメント、決定/分岐、MC/DC など、さまざまな種類のコード カバレッジも利用できます。

于 2012-01-06T10:21:49.200 に答える
0

当社のC/C ++テストカバレッジツールファミリは、ソースコードをインストルメント化し、組み込みコンパイラでコンパイルするプログラムを生成します。このプログラムは、プログラムに追加された「小さな」データ構造にテストカバレッジデータを収集します。これは、ANSI、GCC、Microsoft、GreenHillsなどのさまざまな方言で機能します。

そのデータ構造を埋め込み実行コンテキストからPC上のファイルにエクスポートする必要があります。多くの場合、これは予備のシリアルポートまたはパラレルポートと、ポートに固有のカスタムコードを使用して簡単に行うことができます。ツールは、テストカバレッジビューとその結果のファイルの要約を提供します。

したがって、これらのツールを使用して、ほとんどの実際の状況で、組み込みシステムからテストカバレッジデータを収集できます。

于 2011-12-27T04:19:42.720 に答える