Перевірте, чи працює 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.