Xdebug прекъсва при достъп до статично свойство на класа

Имам проблем с Xdebug в моята среда за разработка.

FROM library/php:5.5-apache

RUN apt-get -qqy update && apt-get -qqy install \ 
               libpq-dev \
               libmcrypt-dev \
               libxml2-dev \
               ssl-cert \
               vim \
               git \
               mc \
        && rm -r /var/lib/apt/lists/*

# compile and add xdebug
RUN pecl install xdebug \
    && echo "zend_extension=xdebug.so" >> "/usr/local/etc/php/conf.d/xdebug.ini"

# configure apache and vhosts
RUN a2enmod rewrite ssl \
        && a2ensite 000-default default-ssl

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_PID_FILE /var/run/apache2/apache2.pid
ENV APACHE_LOCK_DIR /var/lock/apache2

CMD ["apache2-foreground"]

Настройки на Xdebug:

[xdebug]
xdebug.remote_enable=1
xdebug.remote_autostart=0
xdebug.remote_host=172.17.42.1
xdebug.remote_port=9000

Всичко работи добре, но едно нещо. При отстраняване на грешки в кода:

<?php
class A {
    static private $a;

    static public function init() {
        self::$a = 123;
    }
}

A::init();

Ако задам точка на прекъсване на self::$a = 123; или вляза в реда, получавам:

Fatal error: Access to undeclared static property: A::$a

Ако не вляза в този ред, сесията за отстраняване на грешки продължава без никакви проблеми.

Какво не е наред?


person Jakub Filipczyk    schedule 14.09.2015    source източник
comment
Същият проблем с PHP 5.4.43 с Xdebug v2.3.2. Собствена компилация чрез докер.   -  person shark555    schedule 15.09.2015
comment
Използвал съм различни версии на xdebug, различни клиенти за отстраняване на грешки. Инсталирах xdebug чрез pecl и компилирах сам. Проблемът трябва да е някъде в официалния докер php образ   -  person Jakub Filipczyk    schedule 15.09.2015
comment
Каква IDE използвате?   -  person bishop    schedule 15.09.2015
comment
Тествах го с PHPStorm9 и Netbeans8. Проблемът възникна и в двете IDE.   -  person Jakub Filipczyk    schedule 15.09.2015
comment
Имам същия проблем с PHPStorm10, докер изображение php:56-apache   -  person Parris Varney    schedule 17.11.2015
comment
Виждал съм същото с Eclipse и следната PHP-fpm версия с помощта на nginx: PHP 5.6.14-0+deb8u1 Zend Engine v2.6.0 с Zend OPcache v7.0.6-dev с Xdebug v2.3.2   -  person ec2011    schedule 19.01.2016
comment
Също така свързано: github.com/docker-library/php/issues/133 и доклада за проследяване на грешки на xdebug: bugs.xdebug.org/view.php?id=1185   -  person ec2011    schedule 19.01.2016


Отговори (2)


Мисля, че е грешка някъде в XDebug - вижте тези доклади за грешки

Междувременно може да успеете да заобиколите проблема, като използвате функцията xdebug_break() точно СЛЕД реда, който хвърля изключението, и продължете отстраняването на грешки оттам. Опитах се да задам точка на прекъсване на линията, след като изключението е хвърлено, и открих, че точката на прекъсване не е достатъчна, за да спре хвърлянето на изключение.

Не е перфектно решение, но се надяваме, че тези грешки скоро ще бъдат коригирани.

Актуализация: Проблемът е сведен до комбинация от конкретна версия на PHP с конкретна версия на Xdebug и конкретен компилатор, използван за някои изображения. Беше предложено потенциално решение в грешката на docker-library отчет, който включва инсталиране на конкретни версии на тези пакети, ако използвате Docker.

FROM php:5.6.3-apache

# XDebug
RUN yes | pecl install xdebug \
    && yes | apt-get update \
    && yes | apt-get install php5-xdebug \
    && echo "zend_extension=/usr/lib/php5/20131226/xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \
        && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
      && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
person ec2011    schedule 19.01.2016
comment
FYI. Това все още е бъг в PHP 5.6.40 и Xdebug 2.5.5 (последния PHP 5). Въпреки че дискусията в брой 133 смята, че е коригиран в PHP 5.6.30ish, не е така. Единственото решение, с което се захванах, беше препоръчаната от Derrick промяна на изходния код (флаг -O0). Така че не мисля, че някога ще се оправи сега, като се има предвид, че не е проблем в 7. - person scipilot; 08.02.2019
comment
Това определено е по-добре от нищо. И такава болка, защото се случва при всяко използване на статична променлива. Така че трябва да ги разхвърляте навсякъде. Когато казвате, надявам се, че тези грешки скоро ще бъдат коригирани, това ме натъжава, защото използвам стара версия на PHP нарочно в докер, за да има паритет с това, което се използва в наследено производствено приложение. Като... никога няма да се поправи. И все пак, гласуван, защото е НЕЩО. - person Tyler Collier; 17.10.2020
comment
@TylerCollier Добавих още подробности към отговора по-горе, тъй като има предложено решение, което може да помогне. - person ec2011; 18.10.2020
comment
@ec2011 Освен ако не съм разбрал погрешно, не изглежда толкова конкретно. Използвам PHP 5.4.45 и Xdebug 2.4.1 на Debian Jessie (докер). Но благодаря, че ме насочихте към този проблем с github, тъй като открих, че едно от решенията работи за мен. Написах бележките си за това тук. - person Tyler Collier; 18.10.2020
comment
Спаси ме! заобиколете проблема с помощта на xdebug_break() - person Greg; 30.06.2021

Описаната грешка може да бъде възпроизведена само в официалните PHP5 изображения. Изображенията на PHP 7 работят добре и когато създавате персонализирано изображение на PHP5 FPM от jessie или ubuntu, грешката също не се появява.

person willydee    schedule 02.05.2016