PhpStorm + Xdebug = страницата не се зарежда

Първо, имайте информация за 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. Първо отивам в Настройки->PHP->Сървъри и добавям това:

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

(Да, уебсайтът ми работи на порт 8080, в противен случай получавам конфликти с друг софтуер, който използвам.) След това създавам нова конфигурация Run/Debug:

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

Също така създавам отметка за стартиране/спиране на отстраняване на грешки с този инструмент: http://www.jetbrains.com/phpstorm/marklets/index.html

Добре, всичко изглежда готово, така че натиснах бутона Debug в PhpStorm.

Началната страница на моя проект се намира на 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 се изпълняват, но в крайна сметка нищо не се показва в моя браузър. Планирам да използвам Xdebugger за функция, която се намира във файл /Project/class/Account.php, но не мога да отида там, без да натисна бутон на началната си страница.

Защо не използвате Xdebug прокси, казвате? Може ли това да реши нещо? Е, когато се опитам да настроя такъв, получавам тази грешка:

Xdebug прокси: Не може да се свърже с xdebug прокси на 'localhost:9123'

Въпреки че моята 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(), отстраняването на грешки спира внезапно и получавам грешката net::ERR_CONNECTION_RESET в Google Chrome. Възможно ли е това да е проблемът?


person Matthias    schedule 12.04.2012    source източник
comment
Въпреки че моята Xdebug прокси конфигурация е правилна: -- Не мисля така. Знаете ли, че xdebug прокси е за? Имате ли инсталиран/работещ прокси xdebug? -- Убеден съм, че няма да има отговор.   -  person LazyOne    schedule 13.04.2012
comment
Не знам кой е съобщил за това, но: bugs.xdebug.org/view.php? id=810   -  person LazyOne    schedule 16.04.2012
comment
Имах същия проблем. В моя случай настройката на ide_key на PHPSTORM в моя php.ini файл и рестартирането на apache е това, което го поправи за нулева конфигурация за отстраняване на грешки в уеб браузъра.   -  person racl101    schedule 25.03.2013
comment
За най-новите версии можете да намерите допълнителна информация за конфигурацията тук ‹br›.   -  person Pageii Studio    schedule 24.12.2013


Отговори (4)


От това, което описвате, отдалеченото отстраняване на грешки с xdebug работи.

Защо този HTML се връща в браузъра (а не това, което очаквате) е трудно да се каже. Опитахте ли да използвате стабилна версия на xdebug?

person hakre    schedule 12.04.2012
comment
Това е единствената версия, която успях да работя след няколко часа бъркане. Радвам се, че стигнах дотук... - person Matthias; 12.04.2012
comment
Хм, вероятно сте се забъркали твърде много и сте унищожили нещо. Предлагам ви да го настроите от нулата, след като сте документирали наполовина работеща конфигурация. - person hakre; 12.04.2012
comment
Но какво има за настройване? Всичко, което трябва да направите, е да редактирате php.ini, за да сочи правилната dll... Но добре, ще се опитаме да използваме предишна версия на xDebug. - person Matthias; 12.04.2012
comment
Не, точно както казах: това е единствената версия на xdebug, която работи... Всички останали не правят нищо. - person Matthias; 12.04.2012
comment
Както казах: Напълно деинсталирайте xdebug и PHP и ги инсталирайте отново от нулата. Както е написано: Вече сте документирали вашата (счупена, но наполовина работеща) конфигурация. Вече можете да започнете отново от нулата, като внимавате настройката да е бърза, свежа и добре направена. Освен това за по-добро проследяване на проблеми, поставете вашата PHP конфигурация под контрол на версиите. - person hakre; 12.04.2012
comment
Добре, ще опитам това. Междувременно: добави малко допълнителна информация. - person Matthias; 12.04.2012
comment
hakre: Мисля, че може би разбрах какъв може да е проблемът. Бихте ли проверили моето Редактиране Редактиране Редактиране, моля? Благодаря. - person Matthias; 12.04.2012
comment
@Matthias: Моля, погледнете, ако имате този бъг: bugs.php.net/bug .php?id=61079 – Това беше поправено след пускането на PHP 5.4.0. - person hakre; 12.04.2012
comment
Това наистина няма смисъл за мен. Нямам никакви проблеми с моя уебсайт. Но когато натисна бутона за отстраняване на грешки, нищо вече не се зарежда, ВЪПРЕ ТРЕТИ отстраняването на грешки работи перфектно, ДОКАТО не натисна моя клас база данни... - person Matthias; 12.04.2012
comment
Обяснение: Когато има отстраняване на грешки, вътрешните елементи на програмата стават видими. Това е допълнителен процес. Това, което е направено видимо, след това се прехвърля по кабела, така че вашето IDE да може да показва съдържанието на променливите. Представете си, че има грешка, която кара PHP да се срива в процеса на превръщането му видим. Както го имахме за simplexml елементи: bugs.xdebug.org/view.php?id= 746 - просто след това PHP умира, нещата се объркват - само поради отстраняване на грешки. Това е всичко. - person hakre; 12.04.2012
comment
Проблемът може да е бъг с дебъгера или PHP обектите на mysqli. Тъй като има някои доклади с var_dump() (което също прави нещата видими като програма за отстраняване на грешки), предполагам, че има грешка с PHP. Вземете си главна версия и проверете дали проблемът е изчезнал. - person hakre; 12.04.2012
comment
@Matthias Опитайте да отстраните грешки първо на много проста страница, като тази: $a = 5; $b = 3; $z = $a + $b; echo $z;. Ако работи .. значи е нещо друго (xdebug грешка, php се срива и т.н. -- както предложи @hakre). - person LazyOne; 13.04.2012
comment
@Matthias Предлагам също: инсталирайте най-новия стабилен 5.3 клон; същото за xdebug (не RC, а 2.1.x стабилен) и опитайте да отстраните грешки там. - person LazyOne; 13.04.2012
comment
Направих някои тестове на различен компютър. По-старата, стабилна версия на PHP и Xdebug работи наистина. Просто ще ги използвам за момента или ще изчакам поправка. - person Matthias; 21.04.2012

Проблемът е коригиран в Xdebug 2.2.0RC2. Моля, надстройте.

person Nikolay Matveev    schedule 02.05.2012

  • Symfony 2
  • PhpStorm 4.0.1

Надстроих до php_xdebug-2.2.1-5.4-vc9.dll и това реши проблема

person Daniel Mora    schedule 19.08.2012

В моя случай това беше, защото xdebug слушаше само ipv6 порт и браузърът се опита да се свърже чрез ipv4 (localhost).

Не съм сигурен от какво зависи дали сървърът за отстраняване на грешки се свързва към ipv4 или ipv6 порт. В моя случай това е с Ubuntu 12.04 и php неща от хранилището на Ubuntu по подразбиране.

Можете да проверите дали имате същия проблем, като стартирате

sudo netstat -tulpen

докато phpstorm чака връзка. Потърсете запис за порт 9000 (или каквото сте конфигурирали). В моя случай изходът съдържа реда

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

Възможно е да се реши това чрез промяна на настройките на ядрото, но решението, което взех, беше просто да се свържа с този ipv6 порт: В конфигурацията за изпълнение/отстраняване на грешки на phpstorm, използвана за този проект, в настройките на сървъра промених хоста от „localhost“ на „ip6-localhost ". В Ubuntu това е аналогът на ipv6 (::1) на localhost (127.0.0.1), конфигуриран по подразбиране в /etc/hosts. Отново, не съм сигурен, че това се отнася и за други операционни системи.

person didi_X8    schedule 13.12.2012