問題タブ [gcov]
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.
c++ - gcov がカバレッジ ファイルを生成しない
32 ビット マシンで -fprofile-arcs -ftest-coverage フラグを使用して、実行可能ファイルをカバレッジ用にクロス コンパイルしています。結果の実行可能ファイルは、64 ビットのターゲット マシンで実行しています。
実行可能ファイルを実行すると、.bb .bbg および .da ファイルが生成されません。その理由は何でしょうか。
gcc - gcov からより正確な結果を得るにはどうすればよいですか?
mingw gcc 4.4.0 を使用して gcov を試しています。興味深いが奇妙な結果が得られました。よくあるパターンはこんな感じ…
return
直前のループが明らかに実行と終了の両方を行っていることを考えると、どうしてそれがまったく期待できないのでしょうか? この一時変数のタイプがstd::string
.
-O0
問題は、コンパイラ オプションで既に指定していることです。これらは私が使用している正確なコンパイラフラグです...
私の最善の推測は、結局のところ、すべての最適化が無効になっているわけではないということです-O0
。問題に気づいたら、特定の最適化フラグを 1 つずつ探し始めることができますが、これを行う必要があるのは奇妙に思えます。
では、gcov から適切なカバレッジ結果を得るには、どのフラグを指定する必要がありますか?
編集
これまでのところ、次の追加フラグが必要だと思います...
- -fno-default-inline
- -fno-インライン
これらの両方が必要かどうかはわかりませんが、それぞれが異なる特定のタイプのインラインを無効にしていると思います。
ただし、戻り値の最適化を無効にする方法は見つかりませんでした。これは大きな問題ではありませんが、少し面倒です。100% のカバレッジを目指している場合、実際には 100% を達成している一部のファイルは、この問題のために少ないと報告されます。#####
grep はマーカーを見つけて、それらがreturn
ステートメント用かどうかを表示できますが、問題が純粋に RVO であることを確認するために、視覚的な検査を行う必要があります。
c++ - ヒットできないC++コードの行を無視するようにgcovに指示するにはどうすればよいですか?
C++コードのカバレッジを測定するためにgcovを使用しています。100%のカバレッジを実現したいのですが、理論的にはヒットできないコード行(実装する必要があるが呼び出されないメソッド、switch
ステートメントのデフォルトブランチなど)があるために妨げられています。 。)。これらの各ブランチにはassert( false );
ステートメントが含まれていますが、gcovはそれらをヒットしていないものとしてマークします。
これらのブランチを無視するようにgcovに指示できるようにしたいと思います。ソースコードに注釈を付けることによって、または他のメカニズムによって、gcovにその情報を提供する方法はありますか?
xcode - Xcodeでのgcovのリンカーエラー
Xcodeプロジェクトにgcovを追加すると、リンカーエラーが発生します。シンボル__gcov_initおよび__gcov_merge_addが見つかりません。
これはMacOSX10.5およびXcode3.1.4にあり、Quartz Composerプラグインプロジェクトであり、OCUnitテストケースターゲットにgcovを追加しようとしています。BaseSDKとDeploymentTargetはどちらもMacOSX10.5に設定されています。GCCバージョンは4.0に設定されています。
gcovとOCUnitを使用して、別の(非常に単純な)QuartzComposerプラグインプロジェクトを正常に作成できました。何かが足りないかもしれませんが、2つのプロジェクト間のビルド設定は、gcovリンケージに影響を与える可能性のあるものはすべて同じように見えました。(私が見る唯一の違いは、C言語方言、Interface Builderコンパイラの機能しないプロジェクトのいくつかの追加設定、およびClangを実行するユーザー定義設定です。)
任意の提案をいただければ幸いです。
code-coverage - gcovは共有オブジェクトを処理できますか?
最近、gcovを使用してコードカバレッジ情報を収集しています。gcovは実行可能アプリケーションでうまく機能します:)が、.soファイルを読み込もうとすると、次のエラーが発生しました:不明なシンボル__gcov_merge_add。
次に、Googleで検索すると、誰かがリンクフラグ(LDFLAGS)に-lgcovを追加すると言いましたが、このオプションを追加しましたが、機能しませんでした。リンクフラグの--coverageオプションも試してみましたが、このエラーを取り除くことができません。
誰かがこの問題を手伝ってもらえますか?
ありがとうございました。
c++ - gcov:共有ライブラリから.gcda出力を生成しますか?
オプション.gcda
で構築された共有ライブラリにリンクされた実行可能ファイルを実行することにより、gcovデータファイル(ファイル)を生成することは可能ですか?--coverage
基本的に、1つの共有ライブラリにコンパイルされた複数のc ++ファイルで構成されるメインライブラリと、メインライブラリにリンクしてテストするテストプログラムを含む「test」というサブディレクトリがあります。すべてが正常にコンパイルされ、.gcno
ファイルはライブラリソースファイルとテストソースファイルの両方に対して生成されます。これらの.gcda
ファイルはテストソースファイル用にのみ作成されていますが、共有ライブラリにコンパイルされる実際のソースファイル用に本当に必要です。
何か案は?
追加情報:
- それはすべてC++コードです
- すべてがautomakeによって生成されたmakeスクリプトで構築されています
- --coverageオプションは、共有ライブラリMakefile.amのlib_la_CPPFLAGSおよびlib_la_LDFLAGSに指定されています。
- --coverageオプションは、テスト実行可能ファイルMakefile.amのAM_CPPFLAGSおよびAM_LDFLAGSに指定されています。
- テストソースファイルは、Google Test(C ++ユニットテストフレームワーク)を利用します
gcov - GCov および GCC、*.da ファイルが作成されない
GCC バージョン 3.3.6 を使用しています。オブジェクト ファイルを-fprofile-arcs
およびで計測すると-ftest-coverage
、適切な*.bb
および*.bbg
ファイルが作成されます。
オブジェクト ファイルは、次のようにスタティック ライブラリにリンクされlibfoo.a
ます
ar rcs libfoo.a foo1.o foo2.o
。
最後に、一連の静的ライブラリをリンクして、実行可能ファイルを作成します。
gcc -fprofile-arcs -o foo.o <static libraries linked all>
イメージを実行すると、*.da ファイルが作成されません。欠けているステップはありますか?他に提案はありますか?
ありがとう。
c++ - コードカバレッジのためにQMakeでgcovを使用する方法
QTestLibを使用して記述されたユニットテストでgcovを使用したいと思います。これを.proファイルに追加することで、オブジェクトファイルに沿っていくつかの.gcnoファイルを生成することができました。
しかし、私が実行すると:
役に立たないコンテンツで生成された.gcovファイルの束を取得しました(Webのチュートリアルで見られるものとは異なります):
ソースファイルは./MyProject/test/srcディレクトリの下にあり、すべてのオブジェクトファイルはsrcの下の.objディレクトリ(つまり、.MyProject / test / src / .obj)にあります。すべてのバイナリは./MyProject/buildディレクトリに作成されます。
私は何が欠けていますか?
ありがとう!
c++ - .cpp & .h ファイルの場所を lcov に伝えるにはどうすればよいですか?
私のソースとビルド ツリーは次のようになります ( Makefile to put object files from source files different directory into a single, separate directory?を参照してください)。
gcov -o obj/ ../src/Foo.cpp
次に、とを実行して、テスト ディレクトリに .gcov ファイルを生成できますgcov -o obj/ ../src/Bar.cpp
。
しかし、実行すると次のlcov -d obj/ -c -o FooAndBarTests.lcov
ようになります。
そして、実行すると次のようgenhtml FooAndBarTests.lcov
になります。
.cpp と .h ファイルの場所を lcov と genhtml に伝えるにはどうすればよいですか?
assembly - x86アセンブリプロファイリング
x86命令の実行回数を教えてくれる優れたツールを知っている人はいますか。私はgcovを見てきましたが、私を助けるかもしれない他のオプションを見たいと思います。私の究極の目標は、この関数を呼び出して、エミュレート/プロファイリングに関心のある関数を提供できるようにすることです。これにより、各組立ラインが実行された回数が返されます。任意の提案を歓迎します:)ありがとう