C++ コードでインスタンス化されていないテンプレートを見つける最良の方法は何ですか?
テンプレートを多用するコード ベースがあります。もちろん、テスト カバレッジが高いことを確認したいと考えています。使用されているすべてのコードについて、これは を使用して非常にうまく機能しgcov
ます。
ただし、使用されていないテンプレートは、によって実行不可として報告されgcov
ます。
いくつかのグーグル検索の後、g++
これらのテンプレートのコードを強制的に発行する方法はないようです (これは論理的なものであり、コンパイラーはどのように型を推測する必要がありますか?) また、インスタンス化されていないテンプレート コードを gcov に認識させる方法もないようです。実行可能なコードとして。
GCC-ftest-coverage -fprofile-arcs
インスツルメンテーションによって生成されたファイルを拡張できる「すぐに使える」ものはありますか? GCCのgcov オプションのドキュメントによると、テンプレート関数本体全体を 1 つのブロックとしてマークするだけでおそらく十分でしょう。
編集(背景情報): ヘッダーのみのテンプレート ライブラリに取り組んでいます。ここでの私の目的は、未使用/テストされていない機能を見つけることです。
コード カバレッジに欠陥があることは承知していますが、インスタンス化されていないコードを見つけることは、コードのテストを改善するための非常に重要なステップです。現在、各関数の先頭にチェックポイント マクロを配置しています。(file, line)
テスト モードでは、渡されたチェックポイントのグローバル セットに のペアを挿入するコードに展開されます。テストを実行した後、手動ですべてのファイルを読み取り、到達したチェックポイントを使用可能なすべてのチェックポイントのセットと比較します。
インスタンス化されていないコードを見つけることは重要です。たとえば、直感的でない C++ テンプレートの優先順位の動作のために、読者や作成者でさえ使用されると予想されるデッド コードがどこかにある可能性があります。