2019年6月3日月曜日

lcov で "geninfo: ERROR: ***.gcno: reached unexpected end of file" が出たときにやったこと

Coveralls へのカバレッジレポートアップロードを Travis CI でやっていて、
今までは gcc + gcov でやっていたのだが、Codecov の方が clang から gcc に変更になったので、Coveralls は clang に。
と、思ったらぶつかったのでメモ。
https://github.com/srz-zumix/iutest/issues/234



まず、clang が生成する gcno のフォーマットが gcc 4.2 で、Travis CI の xenial 環境に入ってる gcc が 5.5 だったため clang + gcov でもエラーが出て集計できなかった、というのが根本的な原因と思われます。
gcov -r *.gcda;
also_run_disabled_tests.gcno:version '402*', prefer '505*'
Segmentation fault (core dumped)

この状態で lcov を使うと、表題のエラーになっていました。
geninfo: ERROR: /home/travis/build/srz-zumix/iutest/test/assertion_return_tests.gcno: reached unexpected end of file
lcov は gcov をバックエンドとして使っているので、おそらく内部的に gcov のエラーが置きているのではないかと予想。(ホントのところは知らんけど)

解決方法
Check Code Coverage with Clang and LCOV | Logan's Note

↑の記事にあるように、llvm-gcov.sh ファイルを作成する。中身は以下の通り


あとは、lcov のオプションに --gcov-tool path/to/dir/llvm-gcov.sh とするだけです。

iutest で実際にやってますので、そちらも参考にしてみてください。
ではでは。

0 件のコメント:

コメントを投稿