2021SC@SDUSC
libsecp256k1的構建與測驗
- 構建步驟
- Exhaustive tests
- 測驗覆寫率
在上一篇博客中,基本環境搭建和代碼的整理已經結束,本篇將進行專案的構建與測驗,通過這一程序加深對專案的理解和認識,便于認識專案中哪些檔案代碼才是需要重點分析的核心片段,
構建步驟
前面提到,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檔案,三個檔案中有關于測驗結果的資訊,測驗結果如下圖所示,在圖片左上角你可以看到三個檔案的名字:



下面執行一個可選命令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的覆寫率進行總體評估,報告情況如下圖所示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/304996.html
標籤:區塊鏈
