Verwendung von XDebug zum Verfolgen einer PHP-Web-Service-Seite

7

Ich verwende Eclipse und XDebug, um eine PHP-Anwendung zu entwickeln, die auf Web-Services basiert. Ich habe Testseiten, die meine Dienste auf zwei Arten nutzen: AJAX (mit jQuery) und cURL.

Ich füge Breakpoints zu meiner Service-Seite hinzu und starte den Debugger. Wenn ich den Dienst von AJAX aus anrufe, stoppt die Ausführung am Haltepunkt, und ich bekomme meine Variablen, Schritt-für-Schritt-Steuerung usw.

Aber wenn ich den Service mit cURL (d. h. innerhalb einer PHP-Seite) anrufe, funktionieren die Breakpoints nicht. Selbst wenn ich die Debugger-Option "Break at First Line" aktiviere, kann die Ausführung nicht gestoppt werden, wenn cURL verwendet wird.

Ist es ein Debugger-Verhalten? Muss ich meinen cURL-Anrufen ein Headset hinzufügen? Ändern Sie die URL? Oder ist es eine XDebug-Einschränkung?

Danke für Ihre Zeit und Mühe, Guy

    
Traveling Tech Guy 11.01.2010, 22:07
quelle

6 Antworten

9

Ich kann noch nichts sagen, also poste ich das als Antwort.

Können Sie mehr als eine AJAX-Anfrage in einer Sitzung debuggen? Wurde Ihre Debugsitzung in Eclipse noch ausgeführt, als Sie versuchten, mit cURL zu debuggen?

Beschreibung wie es für mich funktioniert:

  1. Starten Sie die Debug-Sitzung mit einer einfachen debug.php-Datei, die nur <?php und nichts anderes enthält. Es stoppt in der ersten Zeile, Sie "weiter" es und es beendet die Ausführung.
  2. Nun fordern Sie das Skript mit cURL (oder einem anderen Browser) an und fügen Sie "? XDEBUG_SESSION_START = ECLIPSE_DBGP" zu seinem Pfad hinzu (ich denke sogar, dass dieser Zusatz optional ist)
  3. Ihr Skript sollte in der Debug-Ansicht in der ersten Zeile angezeigt werden

Hope ths hilft.

    
janpio 17.01.2010, 16:13
quelle
7

Hier ist ein Tipp, wie Sie den Xdebugger-Client von Curl ohne Browser auslösen können:

1- Von der Befehlszeile:

%Vor%

2- Von PHP

%Vor%

Es spielt also keine Rolle, ob Sie "XDEBUG_SESSION = 1" an die CURL-URL anhängen, aber es ist notwendig, ein korrektes Cookie zusammen mit der Anfrage zu senden.

    
Gleb Esman 17.10.2011 19:28
quelle
5

Ich weiß, dass das ein ziemlich alter Thread ist, aber ich dachte, ich würde meine Erfahrung für andere posten, die vielleicht auf sie stoßen, wie ich, mit dem gleichen Problem. Was ich entdeckt habe, ist, dass, wenn Sie remote debuggen (was ich immer mache), einige Einstellungen in php.ini geändert werden müssen, damit dies funktioniert. Hier sind die, die für mich funktionierten:

%Vor%

Die erste Einstellung ist normalerweise "wahr" und weist xdebug an, nach dem Client an der gleichen IP-Adresse zu suchen, von der die HTTP-Anfrage stammt. In diesem Fall kommt die Anfrage jedoch vom Server, so dass dies nicht funktioniert. Stattdessen müssen Sie die zweite Einstellung verwenden, um xdebug mitzuteilen, wo der Client zu finden ist. Hoffe das hilft jemandem ein wenig Zeit zu sparen!

    
Javadecaf 20.01.2013 04:06
quelle
3

Um den Debugger auszulösen, ist die einfachste Lösung, den Cookie-Ansatz -b XDEBUG_SESSION=ECLIPSE_DBGP zu verwenden, der für mich bei Eclipse funktioniert, siehe unten:

%Vor%     
Tish 29.03.2014 21:13
quelle
2

Wenn Sie die Ajax-Anfrage debuggen, wird diese vom Browser im selben Navigationskontext wie die anderen (nicht Ajax) Anfragen gesendet - weshalb es gut funktioniert.


Die von curl gesendete Anfrage befindet sich in einem anderen, anderen Kontext - und ich bin mir nicht sicher, ob Sie den Debugger in diese Datei einbinden können ... Aber, vielleicht ...

Zunächst finden Sie hier eine Information, die hilfreich sein könnte, wenn Sie die Dokumentation von Xdebug angeben:

  

Xdebug enthält Funktionalität zum Speichern   Track einer Debug-Session beim Start   durch einen Browser: Cookies. Das funktioniert   so:

     
  • Wenn die URL-Variable XDEBUG_SESSION_START=name ist   An eine URL angehängt sendet Xdebug a   Cookie mit dem Namen   " XDEBUG_SESSION " und als Wert der   Wert des XDEBUG_SESSION_START   URL-Parameter.
  •   
  • Wenn eine GET (oder POST) Variable XDEBUG_SESSION_START oder die    XDEBUG_SESSION cookie ist gesetzt, Xdebug   wird versuchen, sich mit einem Debugclient zu verbinden.
  •   
  • Um eine Debug-Sitzung zu beenden (und den Cookie zu löschen), fügen Sie einfach die URL hinzu   Parameter XDEBUG_SESSION_STOP .   Xdebug wird dann nicht mehr versuchen zu machen   eine Verbindung zum debugclient.
  •   

Vielleicht könnte es funktionieren, wenn Sie diesen Cookie "von Hand" setzen und ihn während der Curl-Anfrage senden ...

Ich nehme an, Sie müssten zuerst seinen Wert abrufen, wie er von Xdebug zu Beginn der Debugging-Sitzung festgelegt wurde - die erneute Verwendung des Cookies in Ihrem Browser sollte jedoch möglich sein.

Hinweis: Ich habe das noch nie versucht - wenn Sie es versuchen und es funktioniert, können Sie bitte bestätigen, dass es funktioniert hat?

    
Pascal MARTIN 11.01.2010 22:16
quelle
2

Ich bin genau auf dieses Problem gestoßen. Ich habe es gelöst, indem ich die Auto-Start-Funktion off in der php.ini:

ausgeschaltet habe %Vor%

und dann fügen Sie den API-Schlüssel der Webservice-URL hinzu, die mein Webservice-Client aufruft:

%Vor%

und ich bin mir nicht sicher, ob das wichtig ist, aber ich habe den API-Schlüssel in meinen Debugger (MacGDBp) eingegeben. Jetzt wird der Debugger nur gestartet, wenn das serverseitige Skript von webservice aufgerufen wird, nicht wenn der Client gestartet wird.

Hoffe, das hilft.

    
matt 22.06.2010 03:35
quelle

Tags und Links