Перевірте, чи працює xdebug


86

Без встановлення текстового редактора чи IDE, чи можна перевірити, чи працює xdebug, тобто чи може він налагодити php-код?

Єдина частина xdebug, яка з’являється у phpinfo (), полягає в наступному:

Додаткові файли .ini проаналізовані /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini

Це більше не згадується в phpinfo ().


7
Чи має phpinfo()повідомляти про це в завантаженому розширенні? Це те, що ви маєте на увазі під "роботою"?
— Wiseguy

2
Якщо він відображається на вашому phpinfo (), ви можете спробувати встановити telnet через порт Xdebugs (який за замовчуванням становить 9000)
— tix3

@Wiseguy, я оновив запитання. Чи означає це, що він завантажений / працює належним чином?
— oshirowanen

@ tix3, я оновив запитання. Чи означає це, що він завантажений / працює належним чином?
— oshirowanen

2
Якщо розширення фактично завантажено, воно повинно мати власний розділ, в якому перелічені його директиви конфігурації.
— Wiseguy

Відповіді:


94

Насправді, не виконуючи налагодження, я думаю, ви не можете бути впевнені, що налагоджувач працює.

Але ви можете бути впевнені - я гадаю, слід припустити, що якщо деякі аспекти xDebug працюють, то це все буде працювати.

Враховуючи це, ви можете підтвердити, що xDebug встановлено та працює, спробувавши наступне:

1) phpinfo()- це покаже всі завантажені розширення, включаючи xDebug. Якщо воно є, то це впевнене, що воно працює.

2) Якщо це недостатньо для вас, ви можете спробувати скористатися var_dump()функцією. xDebug змінює вихідні дані, var_dump()щоб включити додаткову інформацію. Якщо це на місці, то xDebug працює.

3) xDebug змінює виведення помилок PHP. Якщо ваша програма аварійно завершує роботу з xDebug, ви отримаєте більше інформації про несправність, ніж зі стандартним результатом аварійного завершення роботи PHP.

4) xDebug також додає ряд допоміжних функцій до PHP. Ви можете спробувати будь-який із цих, щоб перевірити, чи працює. Наприклад, функція xdebug_get_code_coverage()повинна існувати і повертати масив. Якщо так, то xDebug встановлено. Якщо ні, то ні.


1
phpinfo () лише згадує xdebug у Additional .ini files parsed. Перевірка решти ваших пропозицій зараз.
— oshirowanen

3
Просто спробував, xdebug_get_code_coverage()і я отримую Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
— oshirowanen

7
досить справедливо. Це досить переконливо говорить вам, що xdebug встановлено неправильно.
— Spudley

3
Просто FYI, якщо це так, то вам слід відкрити свій /etc/php/conf.d/xdebug.iniфайл, який згаданий у додаткових синтаксичних файлах .ini, проаналізований, і розкоментувати всі рядки в ньому. zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
— Тоні Морелло,

@TonyMorello Я думаю, що це мені допомогло, тому що мій php.ini був правильно встановлений із повним шляхом, але в Debian також є /mods-availableкаталог, і це налаштування xdebug.ini суперечило (я думаю) з моїм налаштуванням php.ini.
— PJ Brunet

67

Біжи

php -m -c

у своєму терміналі, а потім шукайте [Zend Modules]. Це має бути десь там, якщо завантажено!

Примітка

Якщо ви використовуєте Ubuntu, він може не відображатися тут, тому що вам потрібно додати налаштування xdebug з /etc/php5/apache2/php.iniв /etc/php5/cli/php.ini. Мої є

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

17
php --versionтакож перелічує Xdebug, якщо його завантажено
— mfink

1
@mfink php --versionу мене не працює. Після запуску моєї машини, після запуску та роботи Apache, php --versionвідображається Xdebug, але phpinfo()не відображається розділ xdebug. І виконання PHP-сценарію не зупиняється на точках зупинки. Після того, як я біжу service apache2 restart, phpinfo()показує розділ XDebug і налагодження роботи. Отже, з якихось причин xdebug не завантажується, коли Apache запускається під час завантаження машини. Тож наразі мені доводиться перезапускати Apache після кожного завантаження.
— Buttle Butkus

37

Спробуйте виконати наступне, якщо слід повернути "існує" або "не існує":

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';

25

Після гіркої майже 24-годинної спроби змусити xdebug працювати з Netbeans 8.0.2, я знайшов рішення, яке, сподіваюсь, буде працювати для всіх стеків Ubuntu та Ubuntu.

Проблема №1: Версії PHP та xdebug повинні бути сумісними

Іноді, якщо ви використовуєте налаштування Linux і apt-get встановити xdebug, це не дасть вам належної версії xdebug. У моєму випадку у мене була остання версія php, але стара версія xdebug. Це повинно бути пов’язано з моєю поточною версією Xubuntu. Версії програмного забезпечення залежать від сховищ, які залежать від версії ОС, яку ви використовуєте.

Рішення: PHP має акуратний менеджер розширень під назвою PECL. Дотримуйтесь інструкцій, наведених тут, щоб забезпечити його роботу. По-перше, як зазначив член у коментарях, вам слід встановити пакет розробників PHP, щоб змусити PECL працювати:

sudo apt-get install php5-dev

Потім, використовуючи PECL, ви зможете встановити останню стабільну версію xdebug:

sudo pecl install php5-xdebug

Щойно ви це зробите, буде встановлена ​​відповідна версія xdebug, але не готова до використання. Після цього вам потрібно буде його ввімкнути. Я бачив багато пропозицій щодо того, як це зробити, але справа в тому, що PHP потребує деяких модулів, щоб бути ввімкненими як для клієнта, так і для сервера, в даному випадку Apache. Здається, найкращою практикою тут є використання вбудованого методу ввімкнення модулів, який називається php5enmod. Використання описано тут .

Проблема №2: Увімкніть модуль правильно

По-перше, вам потрібно буде зайти в папку / etc / php5. Там ви знайдете 3 папки, apache2, cli та mods_available. Папка mods_available містить текстові файли з інструкціями щодо активації даного модуля. Конвенція імен [модуль] .ini. Погляньте всередині декількох з них, подивіться, як вони налаштовані.

Тепер вам доведеться створити ваш файл ini всередині папки mods_available. Створіть файл з ім'ям xdebug.ini, і всередині файлу вставте це:

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

Переконайтесь, що директива [xdebug] присутня, точно так само, як у прикладі вище. Модуль повинен працювати. Насправді, просто скопіювавши і вставивши весь код, ви таким чином станете щасливішим. : D

Примітка: шлях zend_extension дуже важливий. У цьому прикладі він вказує на поточну версію механізму PHP, але спочатку слід перейти до / usr / lib / php5 і переконатися, що папка, названа цифрами, є правильною. Налаштуйте ім'я відповідно до того, що ви там бачите, і поки ви перебуваєте, перевірте всередині папки, щоб переконатися, що xdebug.so справді там. Мало б бути, якби ти все зробив правильно.

Тепер, коли ваш xdebug.ini створений, настав час увімкнути модуль. Для цього відкрийте консоль і введіть:

php5enmod xdebug

Якщо все пішло правильно, PHP створив два посилання на цей файл, одне всередині /etc/php5/apache2/conf.d та інше всередині /etc/php5/cli/conf.d

Перезапустіть сервер Apache і введіть це на консолі:

php -v

Ви повинні отримати щось подібне:

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

Це означає, що клієнт PHP прочитав ваш файл xdebug.ini та завантажив модуль xdebug.so. Все йде нормально.

Тепер створіть скрипт phpinfo десь на своєму веб-сервері та запустіть його. Ось що ви повинні побачити, якщо все пішло райт:

введіть тут опис зображення

Якщо ви бачите це, Apache також завантажив модуль, і ви, мабуть, готові до роботи. А тепер давайте подивимось, чи правильно Netbeans буде налагоджувати. Створіть дуже простий скрипт, додайте деякі змінні, надайте їм значення і встановіть на них точку зупинки. Тепер натисніть CTRL + F5, натисніть "крок" на панелі налагоджувача і перевірте, чи отримаєте ви щось подібне:

xdebug в дії

Не забудьте перевірити конфігурацію Netbeans для налагодження в розділі tools / options / php. Це повинно виглядати приблизно так:

Налагодження конфігурацій на Netbeans

Сподіваюсь, це проливає світло на цю досить незрозумілу, заплутану проблему.

Найкращі побажання!


2
працював у мене, ця відповідь повинна бути на сайті xdebug або netbeans
— southerton

1
Я повинен був встановити пакет розробника PHP для того , щоб отримати PECL для роботи: sudo apt-get install php5-dev.
— до

Крім того, php5enmodне створює жодних посилань у файлах ini, він чудово працює і без.
— до

1
Ще одне: [xdebug]директива у файлі ini має вирішальне значення для її роботи. Мене бентежив той факт, що в оригінальному файлі ini файл [xdebug]відсутній, але для мене він не працював без.
— до

Привіт! Ви маєте рацію щодо встановлення пакету розробника PHP, я відповідно оновлю публікацію. Не впевнений у своєму коментарі до php5enmod. Він створює посилання на вказані мною папки. І так, директива [xdebug] є обов’язковою, я оновлю повідомлення, щоб також відображати це. Дякуємо за відгук!
— Тео Т. Карранца,

10

Просто щоб розширити відповідь KsaR і надати можливість перевірити xdebug з командного рядка:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"

6

Ви можете запустити цей невеликий phpкод

<?php
phpinfo();
?>

Скопіюйте всю вихідну сторінку, вставте її в це посилання . Потім проаналізуйте. Він покаже, встановлено Xdebug чи ні. І це дасть інструкції щодо завершення встановлення.


3

Якщо ви використовуєте Eclipse, тоді зауважте, що під час роботи в режимі XDebug магічна константа __FILE__ завжди буде оцінюватися як:

xdebug://debug-eval

Отже, наступна перевірка поверне істину, якщо ваш сеанс знаходиться під XDebug:

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug

2

у своєму питанні ви згадали, що ваш phpinfo вказував, що apache завантажує конфігурацію xdebug у /etc/php5/apache2/conf.d/xdebug.ini. У багатьох інструкціях в Інтернеті ви можете зауважити, що вони просять вас помістити конфігурацію xdebug у php .ini (і це те, що я зробив) ОДНАЧ, якщо для конфігурації встановлено значення /etc/php5/apache2/conf.d/xdebug.ini, тоді слід видалити налаштування конфігурації [XDebug] з / etc / php5 / apache2 /php.ini та вставте його в /etc/php5/apache2/conf.d/xdebug.ini ЗАМЕСТО. Після того, як я видалив з /etc/php5/apache2/php.ini і натомість помістив /etc/php5/apache2/conf.d/xdebug.ini і перезапустив apache, він заробив !!

Отже, у вашому /etc/php5/apache2/conf.d/xdebug.ini помістіть таке:

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

потім видаліть це з /etc/php5/apache2/php.ini, якщо ви також помістите його туди.

Тоді зробіть:

sudo service apache2 перезапустити

Тоді це має спрацювати !!!


0

Починаючи з xdebug 3, ви можете використовувати такий командний рядок:

php -r "xdebug_info();"

І він буде відображати корисну інформацію про вашу установку xdebug.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.