我希望使用不同计算机的团队能够在远程服务器上调试PHP,但我很难让Xdebug在NetBeans 7.0.1中工作。我尝试了许多在线提示,但无济于事。
为了记录,我在运行WampServer的Windows 7计算机上成功安装了Xdebug 本地。所以我可以在NetBeans中使用断点调试PHP,前提是我将项目属性 - >运行配置 - >运行属性设置为本地网站。但是,如上所述,我的目标是在远程网站上的NetBeans中进行调试。
我的服务器是Ubuntu 11.04计算机。我使用http://www.xdebug.org/find-binary.php的输出将正确的二进制文件放在机器上。我修改了我可以找到的所有php.ini
个文件(在php5/apache2
和php5/cli
目录中)以包含这些行:
zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
如果我查看phpinfo.php
网页,则会说:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans
所以Xdebug似乎确实安装得很好。不过,当我尝试在NetBeans中进行调试时,我会收到无休止的状态栏消息 Waiting For Connection(netbeans-xdebug)。当我按下停止按钮时,我得到在X秒内未检测到xdebug的连接。原因可能是xdebug未安装或未正确配置。
也许我在这里混淆了服务器设置的本地设置? A post表示xdebug.remote_host
应设置为运行NetBeans的计算机的 IP ,但我希望团队能够使用具有不同IP地址的计算机进行调试。问题可能是端口9000,但我检查过它没有被阻止。
任何可以澄清这一点的帮助都将不胜感激!
答案 0 :(得分:55)
运行PHP(和XDebug)的服务器需要能够连接到您的工作站/桌面。
因此,您需要相应地设置服务器,方法是告诉它连接到特定的 IP地址(xdebug.remote_host
)或自动“连接回”({{1 }})。但后者有一些安全隐患。这些概述为in the manual。
答案 1 :(得分:16)
关键指令是:
xdebug.remote_connect_back = On
这允许Web服务器连接到要求调试会话的任何计算机。这样您就不必对IP地址进行硬编码并且能够共享Xdebug。该指令在早期版本中不存在,并且通常在教程和文档中省略。
您还需要验证每台客户端计算机是否接受到端口9000(xdebug.remote_port
)的传入连接。这包括配置防火墙并确保调试器客户端已启动并正在运行
答案 2 :(得分:15)
对我来说,xdebug.remote_connect_back = On
不起作用。
我所做的是在我的客户机上设置ssh端口转发。
远程计算机上的xdebug配置:
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
客户端计算机上的转发端口:
ssh -g -N -lusername -R9000:127.0.0.1:9000 [remote.host.ip]
必须允许远程计算机上的shell访问。
答案 3 :(得分:6)
就我而言,这些命令帮助了我:
./<module name>/client
注意:即使由于'xdebug.remote_autostart = 1'而不存在GET / POST / COOKIE变量,调试器也能正常工作
答案 4 :(得分:3)
摘要:https://xdebug.org/docs/upgrade_guide
xdebug.
(remote_enable
| default_enable
| profiler_enable
| auto_trace
| coverage_enable
)xdebug.mode=debug
或使用develop
| coverage
| gcstats
| profile
xdebug.start_with_request=yes
xdebug.remote_autostart
->由xdebug.mode=debug
替换为xdebug.start_with_request=yes
xdebug.remote_host
->替换为xdebug.client_host
xdebug.remote_port
->替换为xdebug.client_port
或在IDE设置中使用新的默认设置(下面有更多内容)xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.idekey=myKey
xdebug.client_host=x.y.z.a
xdebug.remote_handler=dbgp
哪里
x.y.z.a
= your IDE host
your configured key in the IDE
xdebug.client_port
设置为9000,以保留旧的默认值答案 5 :(得分:1)
感谢服务器端的xdebug.remote_connect_back = On
php.ini
此外,我必须使用this plugin Chrome才能在PhpStorm中启动调试会话
答案 6 :(得分:1)
在尝试配置docker时,我遇到过几次相同的问题,多次摸索后,我意识到这是解决问题的方法。因此,我决定将其放在这里,作为我未来自我的答案。
大多数时候,Dockerfile将此语句添加到php.ini中:
@Service
class DbService {
@Transactional
public void doInDb() {}
}
@Service
class DomainService {
@Autowired DbService dbService;
@Autowired FsService fsService;
...
public void doDbAndFs() {
try {
fsService.saveFiles();
dbService.doInDb();
} catch (Exception e) {
fsService.cleanUp();
}
}
}
这将使一切看起来都还不错,但由于某种原因,PHP风暴实际上没有捕获任何调试连接。用以下内容替换上面的行会立即为我解决问题。
xdebug.remote_connect_back = on
当然,在那之后您仍然需要运行:
xdebug.remote_connect_back = 0
xdebug.remote_host = host.docker.internal
$ docker-compose down
和
$ docker-compose build
答案 7 :(得分:1)
布拉德对 xdebug 3 的回答非常正确;谢谢...就我而言,我使用 PHP7.3.13 安装了 Win 10, Netbeans 8.2 和 IIS 10(eindia.com 是众多网站之一)(浏览器是带有 netbeans 扩展和 FF 的 Chrome)...并且没有 Xampp、Wampp、Lampp...然后我安装了 xdebug(使用向导)和配置如下:
[xDebug]
zend_extension = "C:\Program Files\PHP\v7.3\ext\php_xdebug-3.0.2-7.3-vc15-nts-x86_64.dll"
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler="dbgp"
xdebug.client_host="eindia.com"
;xdebug.remote_host=192.168.1.5
;xdebug.remote_connect_back=1
xdebug.client_port=9003
;xdebug.remote_mode=req
xdebug.idekey="netbeans-xdebug"
它的工作原理就像魅力一样。
答案 8 :(得分:0)
你开始调试的页面扩展名是什么?我记得我疯了,度过了不眠之夜,XDebug的所有设置都很棒。问题是我没有开始.PHP
,而是开始使用.HTML
。
如果您正尝试使用.PHP
文件启动调试。
答案 9 :(得分:0)
您需要设置:
xdebug.remote_host=192.168.1.104
192.168.1.104
是客户端的ip,您使用IDE