Sprawdź, czy xdebug działa


86

Czy można sprawdzić, czy xdebug działa bez instalowania edytora tekstów lub IDE, tj. Czy może on debugować kod php?

Jedyną częścią, którą xdebug pojawia się w phpinfo (), jest:

Dodatkowe pliki .ini przeanalizowane /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

Nigdzie indziej nie wspomniano o tym w phpinfo ().


7
Czy phpinfo()zgłasza to jako wczytane rozszerzenie? Czy to masz na myśli mówiąc „praca”?
Wiseguy

2
Jeśli pokazuje się na twoim phpinfo (), możesz spróbować telnetować się na porcie Xdebugs (który jest domyślnie 9000)
tix3

@Wiseguy, zaktualizowałem pytanie. Czy to oznacza, że ​​jest załadowany / działa poprawnie?
oshirowanen

@ tix3, zaktualizowałem pytanie. Czy to oznacza, że ​​jest załadowany / działa poprawnie?
oshirowanen

2
Jeśli rozszerzenie jest faktycznie załadowane, powinno mieć własną sekcję, która zawiera listę dyrektyw konfiguracyjnych.
Wiseguy

Odpowiedzi:


94

Bez faktycznego debugowania myślę, że nie możesz być pewien, że debugger działa.

Ale możesz być całkiem pewien - myślę, że należy założyć, że jeśli niektóre aspekty xDebug działają, to wszystko będzie działać.

Biorąc to pod uwagę, możesz potwierdzić, że xDebug jest zainstalowany i na miejscu, wykonując następujące czynności:

1) phpinfo()- to pokaże wszystkie załadowane rozszerzenia, w tym xDebug. Jeśli tam jest, można bezpiecznie założyć, że działa.

2) Jeśli to nie wystarczy, możesz spróbować użyć tej var_dump()funkcji. xDebug modyfikuje dane wyjściowe programu, var_dump()aby uwzględnić dodatkowe informacje. Jeśli tak jest, oznacza to, że xDebug działa.

3) xDebug modyfikuje wyjście błędów PHP. Jeśli twój program zawiesza się z xDebug, otrzymasz więcej informacji o niepowodzeniu niż w przypadku standardowego wyjścia awarii PHP.

4) xDebug dodaje także szereg funkcji pomocniczych do PHP. Możesz spróbować dowolnego z nich, aby sprawdzić, czy działa. Na przykład funkcja xdebug_get_code_coverage()powinna istnieć i zwracać tablicę. Jeśli tak, to xDebug jest instalowany. Jeśli nie, to nie jest.


1
phpinfo () wspomina tylko o xdebug w Additional .ini files parsed. Sprawdzam teraz pozostałe sugestie.
oshirowanen

3
Właśnie spróbowałem xdebug_get_code_coverage()i dostaję Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
oshirowanen

7
Słusznie. To dość jednoznacznie mówi, że xdebug nie jest poprawnie zainstalowany.
Spudley,

3
Tylko do Twojej wiadomości, jeśli tak jest, powinieneś otworzyć /etc/php/conf.d/xdebug.iniplik, który jest wymieniony w dodatkowych przeanalizowanych plikach .ini, i odkomentować wszystkie zawarte w nim wiersze. zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
Tony Morello

@TonyMorello Myślę, że to mi pomogło, ponieważ mój php.ini został poprawnie skonfigurowany z pełną ścieżką, ale w Debianie jest również /mods-availablekatalog, a ustawienie xdebug.ini było w konflikcie (myślę) z moim ustawieniem php.ini.
PJ Brunet

67

Biegać

php -m -c

w terminalu, a następnie poszukaj [Zend Modules]. Powinien być gdzieś tam, jeśli jest załadowany!

NB

Jeśli używasz Ubuntu, może się tu nie pojawić, ponieważ musisz dodać ustawienia xdebug z /etc/php5/apache2/php.inido /etc/php5/cli/php.ini. Moje są

[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 --versionwyświetla także Xdebug, jeśli jest załadowany
mfink

1
@mfink php --versionnie działa dla mnie. Zaraz po uruchomieniu mojego komputera, po uruchomieniu i uruchomieniu Apache, php --versionpokazuje Xdebug, ale phpinfo()nie pokazuje sekcji xdebug. Wykonywanie skryptów PHP nie kończy się na punktach przerwania. Po biegnę service apache2 restart, phpinfo()przedstawia przekrój xdebug i prace debugowania. Tak więc, z jakiegoś powodu, xdebug nie jest ładowany, gdy Apache uruchamia się podczas uruchamiania komputera. Na razie muszę ponownie uruchamiać Apache po każdym uruchomieniu.
Buttle Butkus

37

Spróbuj wykonać następujące czynności, powinien zwrócić „istnieje” lub „nie istnieje”:

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

25

Po trudnych, prawie 24-godzinnych próbach zmuszenia xdebug do pracy z Netbeans 8.0.2, znalazłem rozwiązanie, które, mam nadzieję, będzie działać na wszystkich stosach Ubuntu i Ubuntu.

Problem numer 1: Wersje PHP i xdebug muszą być kompatybilne

Czasami, jeśli używasz instalacji systemu Linux i apt-get, aby zainstalować xdebug, nie dostaniesz odpowiedniej wersji xdebug. W moim przypadku miałem najnowszą wersję php, ale starą wersję xdebug. To musi być spowodowane moją obecną wersją Xubuntu. Wersje oprogramowania zależą od repozytoriów, które zależą od używanej wersji systemu operacyjnego.

Rozwiązanie: PHP ma zgrabnego menedżera rozszerzeń o nazwie PECL. Postępuj zgodnie z instrukcjami podanymi tutaj, aby go uruchomić. Po pierwsze, jak zauważył członek w komentarzach, powinieneś zainstalować pakiet programisty PHP, aby PECL działał:

sudo apt-get install php5-dev

Następnie, używając PECL, będziesz mógł zainstalować najnowszą stabilną wersję xdebug:

sudo pecl install php5-xdebug

Gdy to zrobisz, właściwa wersja xdebug zostanie zainstalowana, ale nie będzie gotowa do użycia. Następnie musisz go włączyć. Widziałem wiele sugestii, jak to zrobić, ale faktem jest, że PHP potrzebuje niektórych modułów, aby były włączone zarówno dla klienta, jak i serwera, w tym przypadku Apache. Wygląda na to, że najlepszą praktyką jest tutaj użycie wbudowanej metody włączania modułów, zwanej php5enmod. Użycie jest opisane tutaj .

Problem numer 2: Włącz moduł poprawnie

Najpierw musisz wejść do folderu / etc / php5. Tam znajdziesz 3 foldery, apache2, cli i mods_available. Folder mods_available zawiera pliki tekstowe z instrukcjami aktywacji danego modułu. Konwencja nazw to [moduł] .ini. Zajrzyj do kilku z nich, zobacz, jak są skonfigurowane.

Teraz musisz utworzyć plik ini w folderze mods_available. Utwórz plik o nazwie xdebug.ini i wewnątrz pliku wklej to:

[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

Upewnij się, że dyrektywa [xdebug] jest obecna, dokładnie tak, jak w powyższym przykładzie. Niezbędne jest, aby moduł działał. W rzeczywistości, po prostu skopiuj i wklej cały kod, w ten sposób będziesz szczęśliwszą osobą. :RE

Uwaga: ścieżka zend_extension jest bardzo ważna. W tym przykładzie wskazuje na aktualną wersję silnika PHP, ale najpierw powinieneś przejść do / usr / lib / php5 i upewnić się, że folder o nazwie z numerami jest prawidłowy. Dostosuj nazwę do tego, co tam widzisz, a gdy już to robisz, sprawdź wewnątrz folderu, aby upewnić się, że plik xdebug.so naprawdę tam jest. Powinno być, jeśli zrobiłeś wszystko dobrze.

Teraz, po utworzeniu pliku xdebug.ini, czas włączyć moduł. Aby to zrobić, otwórz konsolę i wpisz:

php5enmod xdebug

Jeśli wszystko poszło dobrze, PHP utworzyło dwa linki do tego pliku, jeden w /etc/php5/apache2/conf.d, a drugi w /etc/php5/cli/conf.d

Zrestartuj serwer Apache i wpisz to na konsoli:

php -v

Powinieneś dostać coś takiego:

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

Oznacza to, że klient PHP odczytał twój plik xdebug.ini i załadował moduł xdebug.so. Jak na razie dobrze.

Teraz utwórz skrypt phpinfo gdzieś na swoim serwerze internetowym i uruchom go. Oto, co powinieneś zobaczyć, jeśli wszystko poszło dobrze:

wprowadź opis obrazu tutaj

Jeśli to widzisz, Apache również załadował moduł i prawdopodobnie jesteś gotowy do pracy. Zobaczmy teraz, czy Netbeans będzie poprawnie debugować. Utwórz bardzo prosty skrypt, dodaj kilka zmiennych, nadaj im wartości i ustaw dla nich punkt przerwania. Teraz naciśnij CTRL + F5, kliknij „wejdź” w panelu debuggera i zobacz, czy pojawi się coś takiego:

xdebug w akcji

Pamiętaj, aby sprawdzić konfigurację Netbeans pod kątem debugowania, w Tools / options / php. Powinien wyglądać mniej więcej tak:

Konfiguracje debugowania w Netbeans

Mam nadzieję, że to rzuci trochę światła na ten raczej niejasny, zagmatwany problem.

Wszystkiego najlepszego!


2
zadziałało dla mnie, ta odpowiedź powinna być prawdopodobnie na stronie xdebug lub netbeans
Southerton

1
Musiałem zainstalować pakiet dla programistów PHP w celu uzyskania pecl do pracy: sudo apt-get install php5-dev.
do

Ponadto php5enmodnie tworzy żadnych linków w plikach ini, działa bezproblemowo.
do

1
Jeszcze jedno: [xdebug]dyrektywa w pliku ini ma kluczowe znaczenie, aby działała. Byłem zdezorientowany faktem, że w oryginalnym pliku ini [xdebug]brakowało pliku , ale dla mnie nie działało bez.
do

Witaj! Masz rację, jeśli chodzi o instalację pakietu programisty PHP, odpowiednio zaktualizuję post. Nie jestem pewien co do twojego komentarza na temat php5enmod thou. Tworzy łącza w określonych folderach. I tak, dyrektywa [xdebug] jest konieczna, zaktualizuję post, aby również to odzwierciedlał. Dzięki za opinie!
Théo T. Carranza

10

Aby rozszerzyć odpowiedź KsaR i zapewnić możliwość sprawdzenia xdebug z linii poleceń:

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

6

możesz uruchomić ten mały phpkod

<?php
phpinfo();
?>

Skopiuj całą stronę wyjściową, wklej ją w ten link . Następnie przeanalizuj. Pokaże, czy Xdebug jest zainstalowany, czy nie. Poda również instrukcje dotyczące zakończenia instalacji.


3

Jeśli używasz Eclipse, pamiętaj, że podczas pracy w trybie XDebug magiczna stała __FILE__ będzie zawsze oceniana jako:

xdebug://debug-eval

Więc poniższe sprawdzenie zwróci prawdę, jeśli twoja sesja jest pod XDebug:

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

2

w swoim pytaniu wspomniałeś, że twoje phpinfo twierdzi, że apache ładuje konfigurację xdebug w /etc/php5/apache2/conf.d/xdebug.ini W wielu instrukcjach online możesz zauważyć, że proszą cię o umieszczenie konfiguracji xdebug w php .ini (i tak właśnie zrobiłem) JEDNAK, jeśli konfiguracja jest ustawiona na /etc/php5/apache2/conf.d/xdebug.ini, powinieneś usunąć ustawienia konfiguracyjne [XDebug] z / etc / php5 / apache2 /php.ini i umieść go w /etc/php5/apache2/conf.d/xdebug.ini ZAMIAST. Po usunięciu z /etc/php5/apache2/php.ini i umieszczeniu zamiast tego /etc/php5/apache2/conf.d/xdebug.ini i ponownym uruchomieniu apache'a, zadziałało !!

Dlatego w swoim /etc/php5/apache2/conf.d/xdebug.ini umieść:

[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"

następnie usuń to z /etc/php5/apache2/php.ini, jeśli również ją tam umieścisz.

Następnie wykonaj:

restart usługi sudo apache2

Wtedy powinno działać !!!


0

Począwszy od xdebug 3 możesz użyć następującego wiersza poleceń:

php -r "xdebug_info();"

Wyświetli też przydatne informacje o instalacji xdebug.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.