diff --git "a/content/zh/post/totaj/\345\246\202\344\275\225\350\267\221\345\242\236\351\207\217\344\273\243\347\240\201\350\246\206\347\233\226\347\216\207.md" "b/content/zh/post/totaj/\345\246\202\344\275\225\350\267\221\345\242\236\351\207\217\344\273\243\347\240\201\350\246\206\347\233\226\347\216\207.md" index 0e08319e080f1a7922d54fa391b8334cea8523ab..7bd703451235a58e3235c2cbdac488f1834ca175 100644 --- "a/content/zh/post/totaj/\345\246\202\344\275\225\350\267\221\345\242\236\351\207\217\344\273\243\347\240\201\350\246\206\347\233\226\347\216\207.md" +++ "b/content/zh/post/totaj/\345\246\202\344\275\225\350\267\221\345\242\236\351\207\217\344\273\243\347\240\201\350\246\206\347\233\226\347\216\207.md" @@ -15,7 +15,7 @@ times = "17:30" [pengjiong@localhost ~]$ lcov -v lcov: LCOV version 1.14 ``` -2. 增加插桩函数用于收集结果:在代码根目录下执行: +2. 增加插桩函数用于收集结果:在代码根目录下执行, 假设此代码根目录为 /home/test/openGauss-server ```shell sed -i '/NotifyProcessActive();/i __gcov_flush();' src/gausskernel/process/postmaster/postmaster.cpp sed -i 'N;256 i extern "C" void __gcov_flush();' src/gausskernel/process/postmaster/postmaster.cpp @@ -76,9 +76,9 @@ Overall coverage rate: 增量代码覆盖率统计: 在全量代码覆盖率结果的基础上,通过增量代码的diff文件,生成增量代码覆盖率。 -1. 得到基线代码和修改后的新代码的diff文件,建议拉取两份完全干净的代码进行比较,以免其他文件影响最终结果。 +1. 得到基线代码和修改后的新代码的diff文件,注意拉取两份完全干净的代码进行比较获取diff结果,以免其他文件影响最终结果。同时注意两份代码的路径深度要一致,如下面的例子所示,基线代码和修改后的新代码,都在 /home/base/xx/ 路径下,深度一致。 ``` -diff -r -N -x ".git" -x "*.gcov" -u /home/workspace/openGauss-server_base /home/workspace/openGauss-serveer_increment >> diff.txt +diff -r -N -x ".git" -x "*.gcov" -u /home/workspace/base/openGauss-server /home/workspace/increment/openGauss-server>> diff.txt ``` -r 表示递归,子目录也产生输出 -N 文件不存在当做空文件,比如新版本增加了一个文件,此选项会将每一行都输出 @@ -90,12 +90,14 @@ addlcov --rc lcov_branch_coverage=1 --diff coverage.info diff.txt -o increment. ``` coverage.info:前面得到的全量覆盖率文件路径 increment.info:输出的增量覆盖率文件路径 -$new_Addr: 新代码路径 -$dep:$new_Addr代码路径深度,即分隔符”/”的个数(包括结尾的),可通过以下命令获取 -```shell -dep=`echo $new_Addr |sed -e 's/\/*$//g' | awk -F"/" '{print NF}'` +$new_Addr: 原始代码路径 +$dep:diff文件中的代码路径深度,即分隔符”/”的个数(包括结尾的) +以前面的代码路径为例,原始代码路径为 /home/test/openGauss-server。用来生成diff.txt文件的干净基线代码路径为 /home/workspace/base/openGauss-server。用来生成diff.txt文件的干净增量代码路径为 /home/workspace/increment/openGauss-server。那么 $new_Addr 应该为原始代码路径即 /home/test/openGauss-server。 $dep 应该为 5,即 /home/workspace/base/openGauss-server 的路径深度,这也是为何生成diff.txt时,要求基线代码和修改后的新代码保持深度一致。 +同时命令中所有文件路径全部使用绝对路径,如果coverage.info文件中部分文件在增量修改后被删除了,在coverage.info里面把那一行删除 +可以得出命令为: +``` +addlcov --rc lcov_branch_coverage=1 --diff /home/test/openGauss-server/coverage.info /home/test/openGauss-server/diff.txt -o /home/test/openGauss-server/increment.info --strip 5 --path /home/test/openGauss-server ``` -注意,所有文件路径全部使用绝对路径,如果coverage.info文件中部分文件在增量修改后被删除了,在coverage.info里面把那一行删除 3. 收集增量覆盖率结果,同全量的操作一样: ```shell genhtml --rc lcov_branch_coverage=1 --no-prefix --no-sort increment.info -o incremen_results