別のアプリケーションで dlopen() を使用して開かれる C++ ライブラリ (.so) があります。しかし、gcov を使用してアプリケーション内で実行している間に、このライブラリのコード カバレッジを見つける必要があります。出来ますか?はいの場合、どのように行うことができますか?
そうでない場合、問題はどのように解決できますか?
別のアプリケーションで dlopen() を使用して開かれる C++ ライブラリ (.so) があります。しかし、gcov を使用してアプリケーション内で実行している間に、このライブラリのコード カバレッジを見つける必要があります。出来ますか?はいの場合、どのように行うことができますか?
そうでない場合、問題はどのように解決できますか?
まず、C++ ライブラリを--coverage
フラグ付きでコンパイルしましたか? これまで gcov で '.so' ライブラリを実際に使用したことがないため、いずれにしても機能するかどうかはわかりません。
次に、アプリケーションのテスト バージョンを を使用せずdlopen()
に、ライブラリの静的ライブラリ (.a) バージョンにリンクし、通常の呼び出しを行うように調整できますか?
はい。によってロードされた共有ライブラリのカバレッジをdlopen
生成できます。
1) 共有ライブラリをフラグ付きでコンパイルする-fprofile-arcs -ftest-coverage
dlopen
2)フラグを使用するプログラムをコンパイルする-fprofile-arc -ftest-coverage
.info
3)ファイルを生成する lcov
lcov --capture --rc lcov_branch_coverage=1 --directory path/to/.gcda --output-file coverage.info
4) html を生成する
genhtml coverage.info --branch-coverage --output-directory out