【发布时间】:2023-05-11 14:47:02
【问题描述】:
我想为我的 PHP 扩展提供代码覆盖率。我正在使用以下设置:
PHP 7.2.2 (cli) (built: Mar 24 2018 20:43:46) ( NTS DEBUG )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
我可以毫无问题地构建扩展并运行所有测试。 我正在配置扩展如下:
CXX=gcc CFLAGS="--coverage -fprofile-arcs -ftest-coverage $CFLAGS" LDFLAGS="--coverage" ./configure
make all的编译步骤
/bin/bash /home/alex/Projects/php-7.2.2/ext/zookeeper/libtool --mode=compile cc -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/home/alex/Projects/php-7.2.2/ext/zookeeper -DPHP_ATOM_INC -I/home/alex/Projects/php-7.2.2/ext/zookeeper/include -I/home/alex/Projects/php-7.2.2/ext/zookeeper/main -I/home/alex/Projects/php-7.2.2/ext/zookeeper -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DHAVE_CONFIG_H --coverage -fprofile-arcs -ftest-coverage -O0 -c /home/alex/Projects/php-7.2.2/ext/zookeeper/zookeeper.c -o zookeeper.lo
生成以下文件:
.libs/zookeeper.gcno
.libs/zookeeper.o
现在是链接部分:
/bin/bash /home/alex/Projects/php-7.2.2/ext/zookeeper/libtool --mode=link cc -DPHP_ATOM_INC -I/home/alex/Projects/php-7.2.2/ext/zookeeper/include -I/home/alex/Projects/php-7.2.2/ext/zookeeper/main -I/home/alex/Projects/php-7.2.2/ext/zookeeper -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DHAVE_CONFIG_H --coverage -fprofile-arcs -ftest-coverage -O0 --coverage -o zookeeper.la -export-dynamic -avoid-version -prefer-pic -module -rpath /home/alex/Projects/php-7.2.2/ext/zookeeper/modules zookeeper.lo -Wl,-rpath,/home/alex/Projects/php-7.2.2/ext/zookeeper/target/release -L/home/alex/Projects/php-7.2.2/ext/zookeeper/target/release -lzookeeper_bridge
记录以下步骤:
rm -fr .libs/zookeeper.gcno
我设法将其缩小到与 PHP 捆绑在一起的 ltmain.sh 脚本的以下行:
https://github.com/php/php-src/blob/d1186b8/ltmain.sh#L3457
我在./configure期间生成的libtool也有这一行:
*.$objext)
现在,如果我手动将其更改为:
*.$objext | *.gcno)
链接过程不再删除.gcno 文件,我可以获得正确的覆盖率报告。
我认为有一种方法可以强制链接过程不删除.gcno 文件,因此允许我生成正确的覆盖率报告。我在这里遗漏了什么明显的东西吗?
【问题讨论】:
标签: php code-coverage php-extension libtool gcov