PhpStorm + Xdebug =页面未加载

时间:2012-04-12 14:06:02

标签: php xdebug phpstorm

首先,有一些xdebug信息:

Xdebug installed: 2.2.0rc1
Server API: Apache 2.4 Handler Apache Lounge
Windows: yes - Compiler: MS VC9 - Architecture: x86
Zend Server: no
PHP Version: 5.4.0
Zend API nr: 220100525
PHP API nr: 20100525
Debug Build: no
Thread Safe Build: yes
Configuration File Path: C:\Windows
Configuration File: C:\Uniserver\UniServer\usr\local\php\php.ini
Extensions directory: C:\Uniserver\UniServer\usr\local\php\extensions

You're already running the latest Xdebug version

一切都很好看。这就是我的php.ini的样子:

[Xdebug]
zend_extension=C:\Uniserver\UniServer\usr\local\php\extensions\php_xdebug-2.2.0RC1-5.4-vc9.dll
xdebug.remote_host=localhost
xdebug.remote_port=9123
xdebug.idekey=PHPSTORM
xdebug.remote_mode=req
xdebug.remote_handler=dbgp
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_autostart=0
xdebug.remote_log="C:\Uniserver\UniServer\usr\local\php\extensions\tmp\log.log"
xdebug.overload_var_dump=1
xdebug.trace_format=0
xdebug.show_exception_trace=0
xdebug.default_enable=0

现在,我将尝试使用PhpStorm进行调试。首先,我转到Settings-> PHP-> Servers并添加:

Name: localhost
Host: localhost
Port: 8080
Debugger: Xdebug

(是的,我的网站在端口8080上运行,否则我与我正在使用的其他软件发生冲突。)然后我创建了一个新的运行/调试配置:

PHP Remote Debug
Name: local
Servers: localhost
Ide key(session id): PHPSTORM

我还使用此工具创建了一个启动/停止调试书签:http://www.jetbrains.com/phpstorm/marklets/index.html

好的,一切准备就绪,所以我点击了PhpStorm中的Debug按钮。

我项目的主页位于http://localhost:8080/Project/page/Home.php,所以我在那里导航。页面加载。我点击书签栏中的开始按钮,重新加载,页面保持空白......

当我在项目中的home.php文件中添加断点并重新加载时,断点就会被击中!我可以跨过,走进去......显示所有的值..这没有任何问题。但是当我查看所有断点,或点击Resume Program,并返回浏览器时,页面完全空白。 HTML代码如下所示:

<html><head><style type="text/css"></style></head><body></body></html>

发生了什么事?为什么我正在调试的页面没有被渲染?踩过代码可以工作,所有的php和html都在执行,但最后我的浏览器中没有显示任何内容。我计划在一个位于文件/Project/class/Account.php中的函数上使用Xdebugger,但是如果没有按下我的主页上的按钮,我就无法到达那里。

为什么不使用你说的Xdebug代理?可能解决任何问题?好吧,每当我尝试设置一个时,我都会收到此错误:

Xdebug代理:无法连接到'localhost:9123'上的xdebug代理

即使我的Xdebug代理配置正确:

IDE key: PHPSTORM
Host: localhost
Port: 9123

任何人都可以告诉我发生了什么事吗?我真的需要这个调试器,因为某些功能因某些原因无法正常工作,而且它让我疯狂。我需要检查传递的变量以及发生了什么变化。

修改

额外信息:当我完成所有代码时,调试器会说:

Waiting for incoming connection with ide key 'PHPSTORM'

这可能是我的页面没有加载的原因吗?

编辑编辑

好的,我也可以开始收听PHP Debug Connections,而不是点击调试按钮。这也有效!我的断点被击中了,我可以介入......但同样的问题仍然存在:我的网页保持空白,我的调试器最后说“断开连接”。问题在任何浏览器中都存在。

编辑编辑

我在调试时发现了一些非常奇怪的东西...我可以直接进入我的代码,直到我点击获取我的数据库实例的函数。 Database类看起来像这样:

class Database
{
    private static $instance = null;
    private static $conn;

    private function __construct()
    {
        try {
            self::$conn = new mysqli('localhost', 'root', 'root', 'database', '3308');
        } catch (Exception $ex) {
            $errorpager = new CustomPageGenerator();
            $errorpager->generateErrorPage("Connection to database failed. Please try again later.");
        }
    }

    public static function getInstance()
    {
        try {
            if (self::$instance == null) {
                self::$instance = new Database();
            }
            return self::$instance;
        } catch (Exception $ex) {
            $errorpager = new CustomPageGenerator();
            $errorpager->generateErrorPage("Connection to database failed. Please try again later.");
            return false;
        }
    }

    public function query($sql)
    {
        try {
            return self::$conn->query($sql);
        } catch (Exception $ex) {
            $errorpager = new CustomPageGenerator();
            $errorpager->generateErrorPage("Connection to database failed. Please try again later.");
            return false;
        }
    }
}

我觉得我的数据库类可能与此问题有关...每次我点击getInstance()函数时,调试都会暂停,我在Google Chrome中遇到net :: ERR_CONNECTION_RESET错误。这可能是问题吗?

4 个答案:

答案 0 :(得分:1)

Xdebug 2.2.0RC2修复了该问题。请升级。

答案 1 :(得分:1)

  • Symfony 2
  • PhpStorm 4.0.1

我已升级到php_xdebug-2.2.1-5.4-vc9.dll,这解决了问题

答案 2 :(得分:0)

根据您的描述,xdebug远程调试可以正常工作。

为什么将HTML返回到浏览器(而不是您期望的)很难说。你尝试过使用稳定版的xdebug吗?

答案 3 :(得分:0)

在我的情况下,这是因为xdebug只在ipv6端口侦听,浏览器尝试通过ipv4(localhost)连接。

如果调试服务器绑定到ipv4或ipv6端口,我不确定它取决于什么。在我的例子中,它是Ubuntu 12.04和来自默认Ubuntu存储库的PHP内容。

您可以通过运行

来检查是否存在同样的问题
sudo netstat -tulpen

而phpstorm正在等待连接。 查找端口9000(或您配置的任何内容)的条目。 在我的情况下,输出然后包含行

tcp6       0      0 :::9000                 :::*                    LISTEN      1000       6687897     318/java 

可以通过更改内核设置来解决这个问题,但我采取的解决方案是连接到此ipv6端口: 在用于该项目的phpstorm的运行/调试配置中,在服务器设置中,我将主机从“localhost”更改为“ip6-localhost”。在Ubuntu中,它是localhost(127.0.0.1)的ipv6副本(:: 1),默认情况下在/ etc / hosts中配置。 同样,我不确定这也适用于其他操作系统。