Gcovr tool that shows C code coverage and related command examples
Recently, I accidentally found the gcovr tool online to show the code coverage rate of a unit test for a project. After using the tool, I thought it was quite good, so I wrote this article for reference by related developers.
In short, gcovr is a tool that shows code coverage in unit tests in a variety of ways (including list, XML, and HTML webpage). The latest version is 3.2. Gcovr: https://pypi.python.org/pypi/gcovr /.
This tool runs in Linux. After decompression, copy the gcovr In the scripts directory to the/usr/bin directory.
The following uses the FindStackDirection. c program to find the growth direction of the stack as an example to describe how to use gcovr.
The program source code is:
/ ************************************************* *********************
* Copyright (C) 2015, Zhou Zhaoxiong.
*
* File Name: FindStackDirection.c
* Document ID: None
* Summary: Finding the growth direction of the stack
* Other instructions: None
* Current version: V1.0
* Author: Zhou Zhaoxiong
* Completion date: 20151218
*
********************************************** ******************** /
#include
// redefine the data type
typedef unsigned char UINT8;
typedef signed int INT32;
// function declaration
void FindStackDirection (void);
/ ************************************************* *********************
* Function description: main function
* Input parameters: None
* Output parameters: None
* Return value: None
* Other instructions: None
* Modified date Version number Modified by Modified content
* ------------------------------------------------- --------------
* 20151218 V1.0 created by Zhou Zhaoxiong
********************************************** ********************* /
INT32 main ()
{
FindStackDirection ();
return 0;
}
/ ************************************************* *********************
* Function description: Find stack growth direction
* Input parameters: None
* Output parameters: None
* Return value: None
* Other instructions: None
* Modified date Version number Modified by Modified content
* ------------------------------------------------- --------------
* 20151218 V1.0 created by Zhou Zhaoxiong
********************************************** ********************* /
void FindStackDirection (void)
{
UINT8 iStackAddr = 0; // used to get the stack address
static UINT8 * pStackAddr = NULL; // used to store the address of the first iStackAddr
if (pStackAddr == NULL) // first entry
{
pStackAddr = & iStackAddr; // Save the address of iStackAddr
FindStackDirection (); // recursion
}
else // second entry
{
if (& iStackAddr> pStackAddr) // The address of the second iStackDirection is greater than the first iStackDirection, then the stack growth direction is upward
{
printf ("Stack grows up! \ n");
}
else if (& iStackAddr <pStackAddr) // The address of the second iStackDirection is less than the first iStackDirection, then the stack growth direction is downward.
{
printf ("Stack grows down! \ n");
}
else
{
printf ("Bad stack! \ n");
}
}
}
1. Program compilation and execution
Upload the sample program to a Linux machine and use "gcc-fprofile-arcs-ftest-coverage-fPIC-O0 FindStackDirection" in the directory where the program is located. the c-o FindStackDirection command is used to compile the program and generate FindStackDirection. gcno and FindStackDirection files.
The "-fprofile-arcs-ftest-coverage-fPIC" in the compilation command is used to generate files that can be processed by the gcovr command.
Then run the "./FindStackDirection" command and generate the FindStackDirection. gcda file.
2. code coverage in the form of output list
Run the "gcovr-r." command in the directory where the program is located. The output result is as follows:
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
FindStackDirection.c 14 12 85% 65,73
------------------------------------------------------------------------------
TOTAL 14 12 85%
------------------------------------------------------------------------------
This is the code coverage report. We can see that after the program runs, it overwrites 85% of the Code.
3. Output branch coverage rate
Run the "gcovr-r.-branches" command in the directory where the program is located. The output result is as follows:
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File Branches Taken Cover Missing
------------------------------------------------------------------------------
FindStackDirection.c 6 4 66% 63,67
------------------------------------------------------------------------------
TOTAL 6 4 66%
------------------------------------------------------------------------------
We can see that the program has 6 branches and 4 of them are executed.
4. Output XML files showing coverage
Run the "gcovr-r.-xml-pretty" command in the directory where the program is located. The output result is as follows:
.
We can see that the command execution result is the code coverage report in XML format.
5. Output HTML files with coverage
Run the "gcovr-r.-html-o findstackdire.html command in the directory where the program is located. The findstackdire.html file is generated in the current directory. Open it in a browser, as shown in:
This HTML file visually shows the code coverage rate.
You can also add the "-html-details" option to generate an independent webpage for each file in the Code project. For example, we run the "gcovr-r.-html-details-o records file in the directory where the program is located. Open the findstackdirection2.html file with a browser, as shown in:
As you can see, the "FindStackDirection. c" text on the page has an underline. Click the text to display a new page, as shown in:
Html
Finally, gcovr is an open-source software written in Python, which is only several dozen KB in size, but is powerful. Let's pay tribute to the elders who developed the software!