【问题标题】:Xdebug doesn't even try to connect to port 9000Xdebug 甚至不尝试连接到端口 9000
【发布时间】:2021-03-29 12:23:49
【问题描述】:

我有php5-fpmRaspberry Pi 上运行并为网站提供服务。我已经安装了php5-xdebug 包并重新启动了php5-fpm,我希望已将其配置为远程调试到 127.0.0.1:9000。我把服务器放在9000 上用nc -l 9000 命令收听。

不幸的是,当我打开任何带有http://mysite/mypage.php?XDEBUG_SESSION=1nobody 事件的页面时,尝试连接到端口9000,因为它的控制台中没有任何字符。页面打开正常。

还有什么可以阻止 PHP 调试器工作?


尝试:

  1. phpinfo页面上显示添加xdebug.remote_log=/var/log/xdebug.log,但没有效果:没有创建任何日志,页面立即出现。

  2. php 文件开头添加xdebug_break(); 也没有效果。没有停顿,没有日志。

  3. 更改端口并没有改变任何东西......


我最初的 phpinfo 如下:

Server API  FPM/FastCGI
Virtual Directory Support   disabled
Configuration File (php.ini) Path   /etc/php5/fpm
Loaded Configuration File   /etc/php5/fpm/php.ini
Scan this dir for additional .ini files /etc/php5/fpm/conf.d
Additional .ini files parsed    /etc/php5/fpm/conf.d/05-opcache.ini, /etc/php5/fpm/conf.d/10-pdo.ini, /etc/php5/fpm/conf.d/20-json.ini, /etc/php5/fpm/conf.d/20-readline.ini, /etc/php5/fpm/conf.d/20-xdebug.ini
PHP API 20131106
PHP Extension   20131226
Zend Extension  220131226
Zend Extension Build    API220131226,NTS
PHP Extension Build API20131226,NTS
Debug Build no
Thread Safety   disabled
Zend Signal Handling    disabled
Zend Memory Manager enabled
Zend Multibyte Support  provided by mbstring
IPv6 Support    enabled
DTrace Support  enabled
Registered PHP Streams  https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters   zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
...
***
xdebug
xdebug support  enabled
Version 2.2.5
IDE Key www-data

***
Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $
Directive   Local Value Master Value
xdebug.auto_trace   Off Off
...
xdebug.coverage_enable  On  On
xdebug.default_enable   On  On
xdebug.dump.COOKIE  no value    no value
xdebug.dump.ENV no value    no value
xdebug.dump.FILES   no value    no value
xdebug.dump.GET no value    no value
xdebug.dump.POST    no value    no value
xdebug.dump.REQUEST no value    no value
xdebug.dump.SERVER  no value    no value
xdebug.dump.SESSION no value    no value
xdebug.dump_globals On  On
xdebug.dump_once    On  On
xdebug.dump_undefined   Off Off
xdebug.extended_info    On  On
xdebug.file_link_format no value    no value
xdebug.idekey   no value    no value
xdebug.max_nesting_level    100 100
xdebug.overload_var_dump    On  On
...
xdebug.remote_autostart Off Off
xdebug.remote_connect_back  Off Off
xdebug.remote_cookie_expire_time    3600    3600
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  127.0.0.1   127.0.0.1
xdebug.remote_log   no value    no value
xdebug.remote_mode  req req
xdebug.remote_port  9000    9000
xdebug.scream   Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars  Off Off
xdebug.show_mem_delta   Off Off
xdebug.trace_enable_trigger Off Off
...

【问题讨论】:

  • 1) 尝试在您的 PHP 代码中设置 xdebug.remote_autostart=On 或添加 xdebug_break();。现在 Xdebug 开始调试可能还不够(?XDEBUG_SESSION=1 可能会这样做.. 但最好尝试XDEBUG_SESSION_START 参数)2) 以防万一:确保您正在编辑正确的 php.ini 文件。 ini 文件作为 CLI 和 Web 服务器可能使用不同的配置 .. 所以最好使用与尝试调试相同的方式获取 phpinfo()
  • 3) 启用 Xdebug 日志 (xdebug.remote_log) 并查看它将在那里写入什么。 4) 最好使用另一个端口(例如90019003 可以)——php-fpm 经常使用相同的 TCP 9000 来满足自己的需要(在这种情况下,Xdebug 将连接到php-fpm 而不是你的 VSCode——Xdebug 日志可以显示(基于典型的“离开”响应))
  • 以防万一(因为我对您的第一段有点困惑):1)Xdebug 必须连接到您的调试客户端(据我所知是 VSCode)而不是您的 Web 服务器。 2) Xdebug 连接到客户端而不是其他方式(最常见的假设/错误)---2.xdebug.org/docs/remote#communication 3) Xdebug 端口/主机与网站主机/端口无关。特别是端口,如果它在同一主机上 - 它必须不同。
  • @LazyOne nc -l 9000 是一个套接字服务器,它会打印到控制台任何连接到端口 9000 的任何人设置的内容,我认为它会表明任何连接尝试,甚至不成功
  • 你明白 127.0.0.1 是本地主机,不管你在哪台机器上?您必须使用调试器机器的 IP。

标签: php debugging xdebug php-5.6


【解决方案1】:

我使用 xdebug 3。以下几点可能对其他人有所帮助,但我最初错过了:

  1. 如果未创建 xdebug 日志,请确保日志目录可由 apache 用户访问和写入。例如 /var/log 通常不是,所以最好像这样使用 /tmp/:

    xdebug.log=/tmp/xdebug.log

  2. 要启用 xdebug,您还需要设置模式:

    xdebug.mode = 调试

  3. 我最后的 xdebug 部分如下。您可以更改 client_port 以应用于您的案例。

zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_autostart=on
xdebug.client_port=9003
xdebug.log=/tmp/xdebug.log
xdebug.client_host=localhost
xdebug.discover_client_host = true
xdebug.mode = debug,develop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多