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 ().
phpinfo()
zgłasza to jako wczytane rozszerzenie? Czy to masz na myśli mówiąc „praca”?Odpowiedzi:
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.źródło
Additional .ini files parsed
. Sprawdzam teraz pozostałe sugestie.xdebug_get_code_coverage()
i dostajęFatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5
./etc/php/conf.d/xdebug.ini
plik, 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
/mods-available
katalog, a ustawienie xdebug.ini było w konflikcie (myślę) z moim ustawieniem php.ini.Biegać
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.ini
do/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
źródło
php --version
wyświetla także Xdebug, jeśli jest załadowanyphp --version
nie działa dla mnie. Zaraz po uruchomieniu mojego komputera, po uruchomieniu i uruchomieniu Apache,php --version
pokazuje Xdebug, alephpinfo()
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.Spróbuj wykonać następujące czynności, powinien zwrócić „istnieje” lub „nie istnieje”:
<?php echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
źródło
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ł:
Następnie, używając PECL, będziesz mógł zainstalować najnowszą stabilną wersję 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:
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:
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:
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:
Pamiętaj, aby sprawdzić konfigurację Netbeans pod kątem debugowania, w Tools / options / php. Powinien wyglądać mniej więcej tak:
Mam nadzieję, że to rzuci trochę światła na ten raczej niejasny, zagmatwany problem.
Wszystkiego najlepszego!
źródło
sudo apt-get install php5-dev
.php5enmod
nie tworzy żadnych linków w plikach ini, działa bezproblemowo.[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.Aby rozszerzyć odpowiedź KsaR i zapewnić możliwość sprawdzenia xdebug z linii poleceń:
źródło
możesz uruchomić ten mały
php
kod<?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.
źródło
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
źródło
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ć !!!
źródło
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.
źródło