gCov 1 5版本資料檔案格式分析

2021-06-11 21:37:19 字數 1274 閱讀 9479

說明:本文參考的源**版本為gcc-2.95.3版本

gcov 1.5版本依賴2類檔案才能生成**覆蓋率報告,第一類:源**檔案,其次就是:原始檔描述檔案、程式基本塊流程**件和覆蓋率資料檔案,本文是針對後者進行分析和說明(當然,源**檔案沒有分析的意義)。

我們可以在gcc源**中的gcov.c原始檔的bbg_file、da_file、bb_file三個檔案指標為線索來找到它們仨的檔案資料格式。

三種檔案都是以二進位制格式存在。它們的關係是,根據bb檔案中的**行資訊找到bbg檔案中對應的基本塊(based block),然後根據基本塊找到對應的覆蓋率資料。最後結合原始檔一併輸出**覆蓋率報告。

以x.c原始檔為例來闡述gcov覆蓋率統計產生的資料檔案格式,以下是x.c的覆蓋率報告。其中 branch data中 + 表示分支是否被覆蓋, # 表示未被覆蓋;line data 中的數字表示**行被執行的次數。

branch dataline datasource code

1:: #include "stdio.h"

2:: /* file: x.c */

3:: void foo(int i)

4::

15:: }

16::

17:: int test_main()

18::

以8個位元組為單位計算,第乙個單位為x檔案的插樁點總數,第二個單位開始到最後表示每個插樁點的覆蓋次數(即執行了多少次);

x.bb檔案描述源檔名和函式名,以及函式中的有效行號。函式名和源檔名都是通過字串表示。字串都是以』\0』結尾的字串,且字元序以4位元組對齊,不足的末尾以0補充。

-2函式-2 + 函式中有效語句所占用的行號(case不算)[當前行的分支塊個數,以4位元組的0表示1個]

-1原始檔-1

bbg檔案是用來表示程式的流程圖的,每個函式對應乙個圖,每個圖中以基本塊(based block)組成。

函式 = 塊總數 + arcs總數 + 以-1結尾

其中「圖」=每個塊的邊數[dest,flag_bits] + …

例如:將x.bbg檔案(二進位制格式)翻譯成如下可讀格式,{}表示乙個圖(也就是乙個函式),以表示一條邊(或叫:弧),其中flag_bits為0時(即0、2、4、6等)表示乙個覆蓋率樁點(見圖中藍色的邊所示),樁點順序與x.da檔案樁點順序對應

// x.c 的 foo 函式

17 25

-1;// x.c 的 test_main 函式

10 12

-1;

1 5 版本編號

在深入程式設計之前,我們應當對 linux 使用的版本編號方法和本書涉及的版本做些說明.首先,注意的是在 linux 系統中使用的每乙個軟體包有自己的發行版本號,它們之間存在相互依賴性 你需要乙個包的特別的版本來執行另外乙個包的特別版本.linux 發布的建立者常常要處理匹配軟體包的繁瑣問題,這樣使...

MySQL5 7版本資料庫安裝

python開發者使用mysql資料庫5.5 版本以上 diango2.0之後放棄mysql5,5之前的支援 在mysql版本當中5.7之前的版本都有.exe或者.msi的可執行安裝檔案,但是到5.7版本只有zip壓縮包安裝方法。mysql官網 2.編寫安裝配置檔案配置檔案 在5.7之前有自帶,後來...

django 1 9版本資料庫建表

django 1.9版本建資料表過程 環境 windows pycharm版本4.0 django版本1.9 2.設定setting.py 資料庫設定 databases from django.db import models class publisher models.model name m...