問題タブ [lcov]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcov - ソースツリーの差分ファイルに対して Gcov/Lcov を実行するには?
lcov --diff
ソース ビューの変更の差分のコード カバレッジ レポートを生成するオプションを使用する方法は? ソース ビューがあり、ソース ビューのいくつかのモジュールの lcov ログ ファイルと html レポートを生成できます。しかし、ソース ツリーに導入された変更の差分についてコード カバレッジ レポートを作成するオプションを探しています。lcov --diff
オプションに出会いました。このオプションの使用方法を教えてもらえますか? このオプションを使用してコードカバレッジを生成することに違いはありません。試した手順は次のとおりです。
.info
ソース ツリーを変更せずにコード カバレッジ データ ( ファイル) を生成します。- ソース ツリーを変更します。
- オプションで差分ファイルを取得し
-u
ます。 - オプションでコード カバレッジ データを再度生成し
--diff
ます。たとえば。--diff <.info file>
code-coverage - LCOV の一貫性のないカバレッジ
使い始めてlcov
約1ヶ月。カバレッジ カウントは一貫していないようです。最初の実行では約 75% のライン カバレッジが報告されましたが、2 回目の実行では 19% しか報告されませんでした。使用されたテスト スイートは、両方の実行に使用されました。中に次の警告が表示されlcov --remove
ます。助言がありますか?
lcov: 警告: トレースファイル all.info に負の数が見つかりました
これは心配する必要がありますか?
makefile - CMake を使用して、*.gcno および *.gcda ファイルを make clean ルールに追加します。
次のような構造のプロジェクトがあります。
主なCMakeLists.txt
ファイルは次のとおりです。
テストCMakeLists.txt
の場合は次のとおりです。
テスト カバレッジ レポートを処理するために、カスタム ターゲットを に追加しましたtest/CMakeLists.txt
。
このコードはすべて正しく機能し、期待どおりに機能します。ワークフローは次のようになります。
make clean
しかし、今度はテスト カバレッジ アーティファクトをルールに追加したいと思います。このコードをに追加しようとしましたtest/CMakeLists.txt
:
しかし、このアプローチは期待どおりに機能しません (私にとって)。アーティファクトを呼び出すときcmake ..
はまだ存在しないため、変数Coverage_DATA
は空であり、cmake ..
テストの実行後にリコールが必要になります。これは醜く見えます(私にとって)。
私の質問は、テスト カバレッジ アーティファクトをmake clean
ルールに追加するにはどうすればよいですか?
c - gcov は c の空のカバレッジを生成します
Ubuntu で c++ と c コードの両方を含むプロジェクトのコード カバレッジを収集しようとしています。
「-fprofile-arcs」と「-ftest-coverage」の値を CXXFLAGS と CFLAGS として使用します。LINKFLAGS として「-lgcov」。
一般的な C プロジェクトの構造は次のとおりです。
src には静的ライブラリのソースが含まれています。
unit_tests dir には、googletest フレームワークで記述されたテスト (種類のテストなど) が含まれます。
内部でテストするための静的ライブラリを含むビルド googletest バイナリが起動された後。
プロジェクト バイナリをビルドして実行すると、*.gcno および *.gcda ファイルが生成されます。ただし、私の C カバレッジの結果は空です (C++ は適切に生成されています)。
lcov コマンドの形式は次のとおりです。
lcov のログは、C 関連の gcda ファイルについて次のように表示します。
gcov は「my_c_gcda_location/*.gcda」のファイルを作成しませんでした`
次のようなエラーもあります。
*.gcda:メモ ファイルとのスタンプの不一致
C のカバレッジ結果を取得するには、追加のパラメーターを指定するか、追加のアクションを実行する必要がありますか? または、これらの問題の原因は何ですか?
c++ - lcov が googletest 単体テストの gcov カバレッジ結果と一致しない
ソースファイルのgoogletestユニットテストを作成し、カバレッジ結果にgcovを使用し、最後にlcovを使用してhtmlドキュメントを生成することにより、ライブラリファイルfoobar.cppのカバレッジ結果を収集しようとしています。
単体テストと gcov の結果は正常に動作するようになりましたが、lcov は適切なカバレッジ結果を表示せず、foobar.cpp .gcov の結果を完全に省略していますか?
基本的に次のようにセットアップされた単体テストプラットフォームがあります。
ディレクトリ:
すべてがunittest /から実行され、このフォルダーにunittest/ $ make
実行可能な foobar_testが作成されます。main()はgoogletest/src/gtest_main.ccファイルにあります。私の Makefile は googletest に基づいており、次の注目すべき設定があります。
メイクファイル:
CXXFLAGS += -g -O0 --coverage -fprofile-arcs -ftest-coverage -Wall -Wextra -pthread
LDFLAGS = -lpthread -lgcov
foobar_test : foobar.o foobar_test.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
実行可能ファイルを 1 回実行します$ ./foobar_test
。これにより、各ソースの .gcno に一致する .gcda が生成されます (合計 4 倍: foobar、foobar_test、gtest_main、および gtest-all)。
次に$ gcov foobar.cpp
、foobar.cpp のみで実行します (代替手段も試しまし$ gcov *.cpp
た... foobar_test.cpp のみを使用しても機能しません)。これにより、一連の /usr/lib がらくたを含む stdout が生成されますが、MY 結果も生成されます。実行された行: 80 の 61.25%。..`を実行し、.gcov ファイルを作成します。
私の .cpp.gcov ファイルを調べると、上記のように 61.25% の行で適切なヒットが表示されます。この時点で、4x の .gcda、4x の gcno、および約 20x の他の .gcov ファイルがあります。
ここで lcov を使用しようとすると、うまくいきませlcov --directory . -c -o result.info
ん。
結果:
aの後にlcov出力を表示すると、$ genhtml report.info --output-directory report && firefox report/index.html
foobar *ファイルを含まないディレクトリが約5つしか表示されませんか?
複数の組み合わせを試しまし$ gcov []cpp
た$ lcov --base-directory [] --directory [] -c -o
が、役に立ちませんでした。また、いくつかのソースファイルをソフトリンクしようとしましたが、助けにはなりませんでした。
セットアップまたはコマンドで何を変更する必要がありますか?? コメント投稿者は、より良い解決策を提案することを歓迎します。