P. *_*ore 29 php ide netbeans netstat xdebug
像许多人一样,我花了更多时间来调试IDE与XDebug的连接,而不是使用XDebug来调试我的程序.我已经让它重复工作,但每隔一段时间我就会遇到常见的"等待连接"问题.我无法本地化导致XDebug工作或失败的原因.我已经使用ubuntu两年了; 我既不是菜鸟,也不是strace guru.我究竟做错了什么?如何更好地调试IDE与XDebug的连接?
zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_log=/var/log/xdebug.log xdebug.extended_info=1 xdebug.idekey="netbeans-xdebug"
我无法解释导致问题的原因或问题何时显现.它开始于我尝试调试我的项目时,这会导致我选择的开发浏览器(Chrome)使用参数打开我的项目的URL XDEBUG_SESSION_START=netbeans-xdebug.这会导致页面在chrome中正常呈现,而Netbeans仅报告"等待连接".
首先,用"等待连接"的消息还活着,我会尝试用netstat来挖过来端口9000,去像这样:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
Run Code Online (Sandbox Code Playgroud)
我关闭了我的IDE,并尝试使用两个文件来帮助弄清楚发生了什么:{webroot}/index.php包含<?php phpinfo(); ?>,并{webroot}/dbgtest.php包含XDebug安装检查脚本:
<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";
socket_close($client);
socket_close($sock);
?>
Run Code Online (Sandbox Code Playgroud)
当我启动XDebug debugclient并打开时http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession,我通常会获得常规输出,然后验证XDebug是否与另一个终端中的netstat连接到脚本:
$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 127.0.0.1:34831 ESTABLISHED
tcp 0 0 127.0.0.1:34831 127.0.0.1:9000 ESTABLISHED
Run Code Online (Sandbox Code Playgroud)
虽然这两个似乎都表明已建立连接,但网页上写着"无法绑定",我无法解释.我按Ctrl-c退出debugclient,此时netstat验证端口9000没有活动.我打开Netbeans,打开{webroot}/index.php并调试调试器,然后打开http://127.0.0.1/index.php.然后调试器通常正常启动.我停止调试器,回到我的项目,这是问题真的变得烦人的地方:有时候,我可以继续正常调试我的项目,有时,问题重新出现,而"等待连接"标志显示,netstat显示:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
tcp6 0 0 127.0.0.1:9000 127.0.0.1:34681 TIME_WAIT
Run Code Online (Sandbox Code Playgroud)
其他时候,我将重新启动计算机,启动终端,然后找到:
$ netstat -an | grep 9000
unix 3 [ ] STREAM CONNECTED 9000
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
我对网络和linux内部不太熟悉,看看这指向了什么.显然有些东西正在使用端口9000.这是什么意思?请注意,尽管我在php.ini中设置了:
$ cat /var/log/xdebug.log
cat: /var/log/xdebug.log: No such file or directory
Run Code Online (Sandbox Code Playgroud)
嗯,我的开发设置与您的有所不同,但我非常清楚这个问题。事实上,我刚刚解决了这个问题...这次我的 Fireeall 阻止了 XDebug 用于与我的 IDE 通信的端口。
阅读您的帐户时,我想到了一些事情:
1)“我无法解释导致问题的原因或问题何时出现。” 这是一个非常重要的陈述,众所周知,技术解决方案严格取决于潜在问题是否总是或有时以看似随机的方式发生。那么...您有时可以通过这种方式执行 XDebugging 还是不可以?
2) 当您的 IDE 正在等待并且您的浏览器立即呈现站点时,我猜您的 IDE 告诉您的 XDebug 服务器启动有问题。B/c 如果 XDebug 启动但无法连接回 XDebug 客户端,则网站将不会立即呈现。但在您的情况下,GET 参数只是被忽略,因为它们对您的 Apache/PHP 服务器没有任何意义,因为它们不知道您想要启动的某些 XDebug 会话。
3)你的解决方案对我来说似乎很复杂。我会首先尽可能保持简单,然后看看它是如何工作的。例如,第一次设置通常不需要“xdebug.idekey=”netbeans-xdebug”。
这是我的两分钱
最佳拉斐尔
| 归档时间: |
|
| 查看次数: |
21519 次 |
| 最近记录: |