2013-10-25 3 views

答えて

12

.gcdaは、コンパイラによって生成されていません。実行するとプログラムによって生成されます。

.gcnoはコンパイル時に生成されるファイルで、「ノートファイル」です。 gccは各CU(コンパイラユニット)の基本ブロックグラフノートファイル(.gcno)を生成します。

main.gcdaはどのように生成されますか?

実行時に、統計データが収集され、メモリに保存されます。いくつかの終了コールバックが登録され、プログラム終了時に.gcdaファイルにデータを書き込むために呼び出されます。つまり、プログラムでexit()の代わりにabort()を呼び出すと、.gcdaファイルは生成されません。

計測はどのように行われますか?計測コードを表示できますか?

詳細を知るにはgccの実装をチェックする必要がありますが、基本的にインストルメンテーションはプログラムに命令を挿入して各命令の実行回数をカウントすることによって行われます。しかし、実際には各命令のカウンタを保持する必要はありません。 GCCはいくつかのアルゴリズムを使用してプログラムフローグラフを生成し、グラフのスパニングツリーを見つけます。いくつかの特別なアークのみが計装されなければならず、それらからすべてのコードブランチのカバレッジが生成されます。 バイナリを逆アセンブルして計測コードを表示することができます。

toplev.c coverage.c profile.c libgcov.c gcov.c gcovの-IO:あなたはgccのソースファイルに見たい場合は そして、ここでは、カバレッジのためのいくつかのファイルです。C

編集:いくつかの既知のgcovのバグFYI:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49484

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28441

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44779

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7970

+0

感謝!!カバレッジのためにそれらのファイルをどのようにトレースしましたか? –

+1

gcovを使ったことがあり、いくつかの問題が発生しましたので、その実装を検討しなければなりませんでした。私はいくつかの既知のバグを追加しましたが、最近のgccで解決されるかもしれません。 – tristan

+0

バグ49484は修正済みと表示されます。 – Technophile

3

Can I see the instrumented code?

あなたはgcdaファイルのようなインストルメントデータを見ることができません。

Gcovの仕組みは?

1. Code instrumentation during compilation

2. Data collection during code execution

3. Data extraction at program exit time

4. Coverage analysis and presentation post-mortem.

uは、このPDFファイルを通過することができ、個々の手順についての詳細を知るために:

gcovのは、4つのフェーズで動作します。

http://ltp.sourceforge.net/documentation/technical_papers/gcov-ols2003.pdf

0

あなたが見ることができますgcovのに関連するコードがで計測されcompi次の手順を実行することができます。以下は

nm executable/objfile 

ステップと出力の添付された画像である: -

gcov instrumented code steps

+1

テキストを表示する画像の目的は何ですか?視覚障がい者がそれを読むことができないようにしますか? –

+0

はい、あなたは正しいです。 –