libsecp256k1比特币密码算法开源库(二)

2021SC@SDUSC

libsecp256k1的构建与测试


在上一篇博客中,基本环境搭建和代码的整理已经结束,本篇将进行项目的构建与测试。通过这一过程加深对项目的理解和认识,便于认识项目中哪些文件代码才是需要重点分析的核心片段。

构建步骤

前面提到,libsecp256k1 是使用 autotools 构建的,autogen.sh是个shell脚本,它的作用就是将自动产生Makefile的过程集成到脚本中,简化操作,执行代码./autogen.sh即可,但事实上经过我的尝试,输入该语句并没有反应,即便是尝试输入chmod 777 ./autogen.sh也无济于事。生成makefile的具体过程还请参加我的上一篇博客。

下面需要执行代码./configure,执行结果如下:
在这里插入图片描述
在这里插入图片描述
通过./configure命令对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,通常./configure命令是源代码安装的第一步。

执行make命令,能正常执行make命令的前提是makefile文件已经正常生成,否则只会得到下图这样的结果:
在这里插入图片描述
make命令会根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。

执行make check命令,对上一步 make 进行检查,确保 make 是没有错误的,执行结果error为0,执行该步操作等待了较长时间,大概三分钟,测试图如下:
在这里插入图片描述
同时该指令输入结束后会自动生成三个文件,分别为tests.log文件,tests.trs文件和test-suite.log文件,三个文件中有关于测试结果的信息,测试结果如下图所示,在图片左上角你可以看到三个文件的名字:
tests.log文件
在这里插入图片描述
在这里插入图片描述
下面执行一个可选命令sudo make instal,该命令可将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。执行结果如下图所示:
在这里插入图片描述
在这里插入图片描述

Exhaustive tests

下面执行命令./exhaustive_tests 运行可执行文件exhaustive_tests,运行时会自动生成相应测试参数。
在这里插入图片描述

下面执行命令valgrind --max-stackframe=2500000 ./exhaustive_tests ,在执行该命令前需要前先安装valgrind,valgrind用于Linux程序的内存调试和代码剖析,可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得程序更加稳固。这里使用 valgrind需要增加最大堆栈大小,将其设为250000。输入安装指令即可下载安装。
在这里插入图片描述
增加最大堆栈大小后再执行exhaustive_tests。结果如下所示,该步操作进行较长时间,大概五分钟才运行结束:
在这里插入图片描述

测试覆盖率

该libsecp256k1库旨在全面覆盖可到达的线路和分支。为了直观看到覆盖率,可以生成测试覆盖率的报告。要创建报告,需要配置–enable-coverage(在配置前需确认自己已经配置好gcc):
./configure --enable-coverage
在这里插入图片描述
运行测试:输入make check命令,可以看到目标可执行文件tests发生错误,tests文件消失。
在这里插入图片描述
在这里插入图片描述
由于gcovr包括分支coverage报告,可用它来创建报告,输入gcovr --exclude 'src/bench*' --print-summary命令。
在这里插入图片描述
要使用带颜色和带注释的源代码创建 HTML 报告,首先创建coverage目录文件,输入mkdir -p coverage命令即可看到当前目录下创建了一个名为coverage的文件夹。
在这里插入图片描述
在coverage目录下创建html文件需输入指令gcovr --exclude 'src/bench*' --html --html-details -o coverage/coverage.html,输入完成后在coverage目录下可看到生成的12个html文件。
在这里插入图片描述
在这里插入图片描述
报告中对src目录下9个文件和bits目录下2个文件生成了html文件报告。
在这里插入图片描述
在这里插入图片描述
以field_impl.h文件为例,生成报告如下图所示:在这里插入图片描述
除上述11个文件报告之外,还有一个coverage总报告,对Lines和Branches的覆盖率进行总体评估。报告情况如下图所示:
在这里插入图片描述


版权声明:本文为qq_50680426原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。