PHP XDEBUG 扩展 | 文档

常见问题


XDEBUG 使用

Q:phpinfo() 报告 Xdebug 已经安装并启用,当错误发生我仍然没有得到任何堆栈跟踪信息。
A1:你需要在所有的 PHP 库和包含文件中搜索任一处的 "set_error_handler" 调用。如果有,你需要注释掉它,或者更换函数句柄主体为调用 xdebug_* API 函数。
A2:你没有在 php.ini 中将 display_error 设置为 1。
Q:Xdebug 没有格式化输出。
A:确保你有将 php.ini 中的 html_errors 设置为 1.
Q:调试客户端没有收到任何连接,我哪里做错了?
A:你可能忘记设置环境变量或者添加必要的信息到你的 URL 中。查看文档了解更多信息。
A:你已经检查了你的防火墙设置?确保 Xdebug 监听的端口(默认 9000)没有被阻塞。
A:你是使用的 FastCGI,也许是通过 FPM(FastCGI 进程管理器)?它默认使用和 Xdebug 一样的端口(9000),所以你需要更改其中一个为不同的数。在 Xdebug 中你可以用 xdebug.remote_port 来完成。
A:如果你是在 SELinux 上运行,你应该确保它不会阻止连接。寻找 name_connect 相关的警告或者和 Xdebug 端口相关的任何信息。你可能需要明确允许访问。访问这个网站或者搜索 "selinux name_connect apache" 来获得更多如何解决的信息。

编译和配置

Q:我没有 phpize 工具
A:Debian 和 Ubuntu 用户需要通过 apt install php5-dev,或者 PHP 7 中通过 apt install php7.0-dev 来安装 PHP 开发包。
Q:这是做什么用的:Xdebug requires Zend Engine API version xxxxxxxx. The Zend Engine API version 2xxxxxxxx which is installed, is newer
A:这个信息意味着你在尝试加载 Xdebug 时使用了它不支持的 PHP 版本。如果你是自己编译的 PHP,很可能是因为你编译 Xdebug 的 PHP 头部不属于你运行的 PHP 版本。例如,你使用的是 PHP 5.3 而你使用的头部仍然是 PHP 5.2。如果你使用的预编译库,那么你用了错误的库。
如果这是你的问题,做以下步骤来诊断:
  • 通过查看 phpinfo()(或者 "php -i")输出来检查你使用的 PHP 版本的 "Zend Extension" API 编号是多少。你可以在输出的顶部找到它,和 PHP 标志、PHP 版本号在一个模块。例如,PHP 5.2 的编号是 "220060519",PHP 5.3 的编号是 "220090626"。
  • 当你完成编译步骤的时候检查 "phpize" 的输出是多少。你要查找的编号也就是 "Zend Extension Api No"。

如果上面两处编号不匹配,那么你是使用了错误的头部在编译。参考下一个FAQ 条目来找出使用哪一个 phpize。

Q:Xdebug 仅作为 PHP 扩展加载,不作为 Zend Extension 加载。

A:定制安装说明可能指引你到了这个条目。

为了 Xdebug 正常工作,包括断点等等,这需要它作为一个 Zend 扩展加载而不仅是一个普通的 PHP 扩展。一些安装工具(PEAR/PECL)有时会建议你使用 extension=xdebug.so 来加载 xdebug。这是不正确的。为了解决这个问题,在"加载配置文件"和"附加的 .ini 文件解析"下面列出的任何 INI 文件的顶部模块中查找代码行 extension=xdebug.so。移除这一行,然后回到定制安装说明

Q:如何找到使用的 phpize?
A:运行:"phpize --help",这会显示 phpize 的全路径。这个路径应该和你的用 "php config"、"pear" 和 "pecl" 库安装的 CLI 库的所在地一样。如果你运行 "php-config --version" 它将会显示你正在运行的 PHP 版本。如果不匹配,也许是在路径中找到了错误的 "phpize" 库,你可以运行如下的配置:
  1. /full/path/to/php/bin/phpize
  2. ./configure --with-php-config=/full/path/to/php/bin/php-config
Q:我在使用 XAMPP,但是似乎我的 xdebug 扩展安装包没有正常工作。
A:如果你取消了 "extension=php_xdebug.dll" 行的注释 ,这是预料之中的。Xdebug 需要 加载 zend_extension="C:\path\to\php_xdebug.dll" 指令。你也可能关闭了 Zend 优化器的加载,因为它是默认开启的,所以 Xdebug 不能正常工作。所以在 php.ini 中查找相关的条目并注释掉。自从 PHP 5.3 起,对于 php.ini 中设置的名称,你总是需要使用 zend_extension 而不是 zen_extension_ts。
Q:在 Debian 中,安装 Xdebug 时我看到了下面的问题,该如何修复?
/usr/lib/libc_nonshared.a(stat.oS)(.text.__i686.get_pc_thunk.bx+0x0):
In function `__i686.get_pc_thunk.bx':
: multiple definition of `__i686.get_pc_thunk.bx'
/usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginS.o
(.gnu.linkonce.t.__i686.get_pc_thunk.bx+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [xdebug.la] Error 1 
A:这是一个 Debian 自身的问题,看这里了解更多信息。