这几天由于公司项目需要,我下载了LLCov的源码,结合llvm、clang的代码进行使用。感觉现在LLCov的名气并不是很大,网上搜寻到的相关资料也不是非常的多。通过这几天的努力和同事的帮忙,我成功地在自己的机子上将LLCov运行了起来。现在打算将整个过程分享给大家。
首先给出LLCov的github源码地址: https://github.com/choller/LLCov
还有两个参考网站,后面会用到:
http://clang.llvm.org/get_started.html clang安装教程
http://llvm.org/docs/GettingStarted.html#requirements llvm安装教程
我的系统配置:
OS: Ubuntu 12.04 32bits
CPU: Intel Core i7 4cores
LLCov是个什么东西呢?从字面上理解,就是LLVM 编译环境下的代码Covery统计程序。使用过gcov的人应该对此并不陌生。在LLCov的README中找到的相关定义是这样子的:
LLCov is a C/C++ code instrumentation tool that can be used to measure block coverage. Unlike the popular GCOV coverage tool for GCC, LLCov instruments each basic block in the code with a call to an external function (provided by an arbitrary runtime library). In addition, the instrumentation can be limited to parts of the code (e.g. individual files, functions or blocks) to improve performance and focus on the relevant code parts. LLCov is based on LLVM and integrates into the Clang C/C++ compiler.
简言之,LLCov在执行程序过程中会不断调用自己的一些库函数完成代码运行的统计工作。
首先从github上得到源码,解压缩后进入文件夹LLCov-master。其中INSTALL文件介绍了整个安装的过程,HOWTO介绍的是怎样运行LLCov. 整个过程看起来简单粗暴,但由于可能LLCov最后的更新时间比较久远,很多步骤并不完整。下面可以听我慢慢说来。
具体步骤如下:
1. 在svn上check out llvm和clang的源代码。
这一步没有什么问题,按照INSTALL的步骤做即可:
svn co http://llvm.org/svn/llvm-project/llvm/branches/release_33 llvm
export LLVM_ROOT=`pwd`/llvm
cd llvm/tools/
svn co http://llvm.org/svn/llvm-project/cfe/branches/release_33 clang
注意如果在一些公司的内部网络,svn无法下载资源的话,请设置svn的代理。对于我的情况,我是在/etc/subversion/servers里面设置http-proxy-host和http-proxy-port。同时注意到这里设置了环境变量LLVM_ROOT为 LLCov-master/llvm,但是使用export只是在当前bash中使用。如果重启bash这个变量就被重置了。解决的办法是直接修改~/.bashrc文件。修改环境变量的方法我就不多说了,上网搜一下都有的。
2. 在clang和llvm的代码中打入LLCov的补丁:
cd clang
patch -p0 < ../../../clang-llcov.patch
cd ../..
patch -p0 < ../llvm-llcov.patch
这一步也没有什么问题。并且从这一步我们就更清楚LLCov进行代码统计的运行机制了:LLCov会修改LLVM和clang的源代码,在里面加入一些自己的函数。LLVM和clang成功编译并执行的时候就会调用一些LLCov的库函数完成相应的功能。有点类似与寄生虫。有兴趣的朋友打开那两个patch文件,看看到底对哪些文件进行了修改。
3. 拷贝LLCov.cpp
cd ..
make srcinstall
接下来慢慢地就开始出问题了。首先cd ..后回到LLCov-master目录,输入make srcinstall的时候可能会遇到类似 “/build/Release+Asserts/bin/clang: No such file or directory”的问题。我们打开LLCov-master下面的Makefile文件看看srcinstall后面写的是&#x