【问题标题】:How do I use Xdebug to help me find dead code?如何使用 Xdebug 帮助我找到死代码?
【发布时间】:2014-03-03 17:14:42
【问题描述】:

当我运行我的 PHPUnit 测试时,Xdebug 会生成一个很好的代码覆盖率报告,它可以准确地显示我在每个 PHP 文件中每行代码执行了多少次。

我想在正常使用一周的情况下为我的网站获取相同的报告,以便我可以在我的网站上找到可能不再使用的 PHP 行。不是运行我的 PHP 代码的单元测试,而是 Web 服务器,但我应该能够得到相同的报告,对吧?

如何设置 Xdebug 以在实时站点上收集数据并生成代码覆盖率报告?

【问题讨论】:

  • 谁对我投了反对票,请至少让我知道这个问题有什么问题?
  • 我看到其他帖子说 Xdebug 可以 用于此,但我不知道如何让 Xdebug 开始收集代码覆盖率数据(xdebug.org/docs/code_coverage 说这是由 debug.coverage_enable 控制,它已经默认为 on),或者在它收集了一些数据之后,如何从中生成漂亮的 HTML 报告。
  • PHPUnit 今天正在生成这些报告,类似于 Sonar 和其他工具。我相信 XDebug 只是为您提供覆盖率统计信息,而不是报告。为此,您必须通读 XDebug 手册。

标签: php phpunit xdebug dead-code


【解决方案1】:

我会回答我自己的问题。 Xdebug 提供了一个xdebug_start_code_coverage() 调用来开始收集代码覆盖信息,并提供一个xdebug_get_code_coverage() 调用来检索关于哪些代码被覆盖的信息。这很容易应用于单元测试,因为您通常只关心在受控情况下运行一系列测试所涵盖的代码。 (打开覆盖,运行测试,然后你就得到了覆盖结果。)但是对于 Web 服务器应用程序上的任意命中,你可能需要在 preDispatch 中启动代码覆盖,然后让 postDispatch 将统计信息写入一个数据库(或以其他方式存储它们),以便稍后您可以将结果整理成报告。这不是 Xdebug 处理的。

Xdebug 可以收集 cachegrind 格式的分析信息,所以我会看看我是否可以使用它来帮助查找哪些代码没有被调用。

【讨论】:

  • 我也想做同样的事情:记录一个月内我们实时应用程序的所有函数调用/所有代码执行,并创建一个包含函数调用频率的报告。如果可以记录所有http请求以重播使用情况,那就太好了。你找到解决办法了吗?
猜你喜欢
  • 2013-04-29
  • 2015-11-30
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多