2009-10-07 16 views
33

Używam Netbeans 6.7 i XDebug do debugowania witryny PHP na moim komputerze, uruchamiając żądanie z poziomu Netbeans (Project-> Debug). Działa to dobrze i jest bardzo użyteczny.Uruchom XDebug w Netbeans na żądanie zewnętrzne

Moje pytanie brzmi: czy możliwe jest dołączenie debuggera do każdego przychodzącego żądania, a raczej do tych, które uruchamiam z poziomu Netbeans?

czyli zamiast klikania „Debug”, umieścić Netbeans w trybie którym debugger jest uruchomiony i dołącza do kolejnego wniosku, że wchodzi.

Mam wrażenie to może być głupie pytanie, ale czy możliwe, że byłoby wspaniale.

Edit: Nieco więcej informacji

Mój system (Ubuntu 9.04) jest ustawiony w następujący sposób:

Zawartość /etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20060613/xdebug.so 

xdebug.remote_enable=on 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_host=localhost 
xdebug.remote_port=9000 
xdebug.idekey=netbeans-xdebug 

Netbeans PHP opcji debugowania są domyślne :

Debugger Port: 9000 
Session ID: netbeans-xdebug 
Stop at the First Line: ticked 

Mój plik /etc/hosts przekierowuje www.mywebsite.com do localhost

Gdybym kliknij przycisk debugowania w NetBeans, to Firefox jest uruchomiony z adresem http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug i debugger działa zgodnie z oczekiwaniami.

Ale jeśli po prostu przeglądam http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, to nie uruchamia debagera w Netbeans.

Próbowałem także ustawić xdebug.remote_host=www.mywebsite.com, ale to nie ma znaczenia.

Ponadto mam włączone xdebug.remote_log, a to pokazuje informacje, gdy zaczynam od wewnątrz netbeans, ale nic dla żądań zewnętrznych. Więc nie sądzę, że XDebug w ogóle dostrzega żądania zewnętrzne.

+0

uwaga: czy to nie jest remote_handler z r na końcu?!? –

+0

@Fronker tak, myślę, że masz rację, dzięki. Naprawiony. –

+0

Dla mnie nie wiedziałem, że istnieją TRZY lokalizacje, w których musiałem określić port = 9000, a niedopasowanie powodowało "Oczekiwanie na połączenie (netbeans-xdebug)": http://stackoverflow.com/a/41768167/470749 – Ryan

Odpowiedz

40

iść do właściwości projektu>konfiguracyjnych run>zaawansowanych>debug url i sprawdzić nie otwartą przeglądarkę internetową (*). do nie ustawić host pod proxy debugger. zapisz te ustawienia. w oknie projektu na Twoim projekcie: kliknij prawym przyciskiem myszy>debugowanie (to rozpoczyna nasłuchiwanie połączeń debugowania). żadna przeglądarka nie jest uruchomiona. wprowadź http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug w przeglądarce. powinno się włamać do netbeans.przynajmniej to, co dzieje się tutaj :)

(*) można również ustawić mapowanie ścieżki - dla mnie to działa bez

+2

Doskonale, to wystarczy! –

+2

Wykonując powyższe czynności, odznacz pole wyboru "Zatrzymaj od pierwszej linii", jeśli nie chcesz, aby zatrzymywał się na górze, np. Plik index.php cały czas, ale tylko bezpośrednio na punktach przerwania w określonym pliku osiągniętym przez ścieżka podrzędna np. "http: // localhost/test /" -> TestController.php – tomg

+0

Jeśli używasz wtyczek do przeglądarek wymienionych na trzecim etapie [Uruchomienie debuggera] (http://xdebug.org/ docs/remote), nie musisz dodawać "? XDEBUG_SESSION_START = netbeans-xdebug". Wystarczy go włączyć i wyłączyć za pomocą przeglądarki. – colan

0

Nie jestem pewien co do Netbeans, ale każde inne IDE, którego używałem, zawsze nasłuchuje połączenia debugowania. Możesz rozpocząć nową sesję debugowania od xdebug, dołączając do adresu zapytania ciąg zapytania ?XDEBUG_SESSION_START=name. Jeśli Netbeans nasłuchuje, powinna rozpocząć nową sesję debugowania.

Zobacz http://xdebug.org/docs/remote#browser_session więcej szczegółów

+0

Dzięki za to, ale to nie działa - to tak, jakby Netbeans mógł uruchomić sam debugger, ale nie słucha zewnętrznych połączeń. Rozszerzyłem nieco moje pytanie. –

17

Domyślnie XDebug nie będzie próbował połączyć się ze zdalnym hostem, gdy argument "Cookie/URL" XDEBUG_SESSION_START nie został określony. Możesz włączyć xdebug jako "zawsze włączony", ustawiając xdebug.remote_autostart na 1 w pliku php.ini.

Ponadto należy uruchomić debugger PHP w NetBeans, aby działało. Nie znalazłem jeszcze lepszego rozwiązania, ale możesz mieć debuggera PHP nasłuchującego połączenia przychodzące, zaczynając debugowanie losowego pliku (użyj CTRL + SHIFT + F5, aby rozpocząć debugowanie pliku), a następnie kontynuuj (naciskając F5) raz zatrzymał się w punkcie przerwania. Debugger Netbeans powinien działać, dopóki go nie zatrzymasz.

Aktualizacja: ze względu na sprawdzanie identyfikatora sesji przez NetBeans (XDEBUG_SESSION_START), należy również ustawić zmienną idekey. np:

xdebug.remote_autostart = 1 
xdebug.idekey = "netbeans-xdebug" 
+2

Perfect !, przez całe życie zastanawiałem się, czy istnieje sposób debugowania bez potrzeby dodawania '? XDEBUG_SESSION_START = session_name' do żądania HTTP –

+0

Nigdy, przenigdy nie działało to z Netbeans. Mogę jednak z powodzeniem (i tylko) debugować przy użyciu "idekey". – Pere

1

miałem podobny problem (na NetBeans, Mac OSX), po aktualizacji PHP i kompilacji/instalowania Xdebug. phpinfo pokazało xdebug jako załadowany, ale nadal nie łączyło się, a po wypróbowaniu wszystkiego, co wymienione powyżej, nadal nie miało powodzenia. Następnie próbowałem redukując liczbę parametrów ustawionych w moim pliku PHP.ini z powrotem do wymaganego minimum. To wydawało się rozwiązać problem dla mnie.

; REMOVED (commented) the following 
; xdebug.remote_log=/myfile.log 
;xdebug.extended_info = off 
;xdebug.auto_trace=1 
;xdebug.trace_output_dir=/mydir/myphptracefile.txt 
;xdebug.trace_output_name=php_trace.%c 
;xdebug.collect_params=4 

ja też przemianowany domyślny xdebug.idekey z NetBeans-XDebug domyślne, a następnie z powrotem.

Po ponownym uruchomieniu Apache, xdebug znów zaczął działać: nie jestem pewien, co dokładnie naprawiłem, ale dobrym punktem wyjścia może być , zacznij od minimalnej liczby ustawień xdebug w pliku php.ini, a następnie powoli dodaj więcej, jeśli ich potrzebujesz. Podejrzewam, że mogło to mieć coś wspólnego z ustawieniami śledzenia, ale nie mogę być tego pewien.

Podstawowe ustawienia skończyło się używając były:

xdebug.remote_enable=on 
xdebug.remote_port=9000 
xdebug.remote_host=localhost 
xdebug.remote_handler=dbgp 
xdebug.idekey=netbeans-xdebug 

Jest to także dobry pomysł, aby skompilować debugclient (w pakiecie źródłowym xdebug) i sprawdzić, debugowanie w linii poleceń, jak to będzie powiedzieć, czy xdebug może przynajmniej działać niezależnie od twojego IDE.

Powiązane problemy