PHP XDEBUG 扩展 | 文档 代码分析能够告诉你在一个请求中脚本中的哪一行(或者脚本的设置)被执行了。比如利用这个信息你可以发现你的单元测试的好坏程度。 Xdebug 的代码覆盖功能经常和 PHP_CodeCoverage 结合使用,用做 PHPUnit 运行的一部分。PHPUnit 将代码覆盖率收集委托给 Xdebug。它通过 xdebug_start_code_coverage() 和 xdebug_stop_code_coverage() 为每个测试开启和停止代码覆盖,使用 xdebug_get_code_coverage() 来取出结果。 代码覆盖的主要输出是一个数组,详细说明在运行代码覆盖集合活跃的代码时,哪些文件哪些行被“击中”。 但代码覆盖功能还可以在产生额外性能影响的情况下,分析哪些代码行上有可执行代码,哪些代码行实际可以被命中(无用代码分析),还可以进行检测以找出函数和方法中的哪些分支和路径被追踪。xdebug_start_code_coverage() 函数记录了各种选项。 过滤
Xdebug 2.6 引入了代码覆盖的过滤功能。使用过滤器在代码覆盖率收集期间你可以通过白名单包括,或通过黑名单排除,被分析的路径或类名前缀。一个典型的用例是将过滤器配置为只包含 过滤器的工作原理是根据配置的过滤器标记每个可执行单元(函数,方法,文件)。 Xdebug 只在特定可执行单元第一次被 include/require 时才这样做,因为 PHP 第一次解析和编译一个文件时才会发生过滤。 Xdebug 需要在这时这样做,也是因为当这时它会分析哪些路径能运行,可执行单元的哪些行不能执行。在这时标记可执行单元,也意味着比如 Xdebug 想要计算包含在代码覆盖中的行时不必每一次运行过滤器。 因此,在代码被 include/require 之前设置过滤器非常重要。目前最好使用 PHP 的 auto_prepend_file 设置通过自动前置文件来完成。
设置过滤器只展示 示例:
设置这个过滤器后,代码覆盖率信息将只包含位于 php -dauto_prepend_file=xdebug_filter.php yourscript.php 或者结合 PHPUnit,当通过 Composer 安装时,使用: php -dauto_prepend_file=xdebug_filter.php vendor/bin/phpunit xdebug_set_filter() 参数介绍的完整文档在其自己的文档页面。 相关设置xdebug.coverage_enable
类型:布尔值,默认值: 1, 由 Xdebug >= 2.2 引入
如果这个设置设置为 0,那么 Xdebug 将不会设置内部结构来允许代码覆盖。这能让 Xdebug 速度加快一点,但是代码覆盖率分析将不会工作。
相关函数boolean xdebug_code_coverage_started()
返回代码覆盖是否活跃
返回代码覆盖是否已经开启。 示例:
<?php 返回:
bool(false) bool(true) array xdebug_get_code_coverage()
返回代码覆盖信息
返回一个数组结构,包含哪些行在脚本中(包括 inlcude 的文件)被执行了的信息。下面的示例展示了一个指定文件的代码覆盖: 示例:
<?php 返回:
array '/home/httpd/html/test/xdebug/docs/xdebug_get_code_coverage.php' => array 5 => int 1 6 => int 1 7 => int 1 9 => int 1 10 => int 1 11 => int 1 12 => int 1 13 => int 1 15 => int 1 16 => int 1 18 => int 1 void xdebug_set_filter( int $group, int $list_type, array $configuration )
设置过滤器
由 2.6 版本引入
当展示堆栈跟踪或者记录函数跟踪时,或者当收集代码覆盖时,这个函数配置 Xdebug 使用的过滤器。过滤器配置应用于每个独立的执行单元(函数,方法,脚本主体)。
第一个参数,
你可以设置不同类型的过滤器。对于文件路径或完全限定类名,有一个白名单和黑名单选项。
用做第二个参数 "
不能同时配置黑名单和白名单,或者为路径和命名空间配置黑名单/白名单。 在任意的一个时间,四种列出的类型中只有一种能活跃。但是可以使用
排除跟踪 示例:
<?php
包含跟踪中的函数调用(不在类名之下), 示例:
<?php
只在 示例:
<?php void xdebug_start_code_coverage( [int options] )
开启代码覆盖
这个函数开始统计代码覆盖的信息。这个信息由二维数组组成,数组主下标是执行的文件名字,第二个索引是行号。返回的值代表代码行是否已经执行或者是不可执行的代码行。 每一行返回的值:
-1 只有在 XDEBUG_CC_UNUSED 开启时会返回,值 -2 只有在 XDEBUG_CC_UNUSED 和 XDEBUG_CC_DEAD_CODE 都开启时才会返回。
这个函数有三个选项,他们是位字段:
可以像下面示例中展示的一样使用这个选项。 示例:
<?php void xdebug_stop_code_coverage( [int cleanup=1] )
停止代码覆盖
这个函数会停止收集信息,内存中的信息将会被销毁。如果传递 0 作为参数,那么代码覆盖将不会被销毁,以至于可以再次使用 xdebug_start_code_coverage() 函数来继续收集信息。 |
||
版权所有 © 2002-2019 Derick Rethans
由 Monica 基于 https://xdebug.org/ 翻译,最后修改:2019-08-01 E-mail: MonicaPu2014@Gmail.com 京 ICP 备 16054607 号 |