Frage

Ich bin mit Eclipse und XDebug eine PHP-Anwendung zu entwickeln, die auf Web-Services setzt. Ich habe Testseiten, die meine Dienste auf 2 Arten konsumieren. AJAX (mit jQuery) und cURL

ich hinzufügen einzelnen Stützpunkten meine Service-Seite und den Debugger starten. Als ich das den Dienst von AJAX aufrufen, Ausführung schön an den Haltepunkt stoppt, und ich meine Variablen zu erhalten, Schritt-für-Schritt-Steuerung usw.

Aber wenn ich den Dienst mit cURL nennen (das heißt innerhalb einer PHP-Seite), nicht die einzelnen Stützpunkte Funktion. Auch wenn ich auf der „Break at ersten Zeile“ Debugger-Option aktivieren, kann ich nicht die Ausführung zu stoppen erhalten, wenn cURL.

Ist es ein Debugger Verhalten? Benötige ich einen hearder meiner cURL Anrufe hinzufügen? Ändern Sie die URL? Oder ist es eine XDebug Einschränkung?

Vielen Dank für Ihre Zeit und Mühe, Guy

War es hilfreich?

Lösung

Ich kann noch nicht kommentieren, so dass ich dies als eine Antwort schreiben.

Können Sie debuggen mehr als eine AJAX-Anforderung in einer Sitzung? Wurde Ihr Debug-Sitzung noch in Eclipse ausgeführt wird, wenn Sie debuggen mit cURL versucht?

Beschreibung, wie es funktioniert für mich:

  1. Starten Sie Debug-Sitzung mit einer einfachen debug.php-Datei, die sonst nur ein <?php und nichts enthält. Es stoppt in der ersten Zeile, Sie auf „Weiter“, und es beendet die Ausführung.
  2. fordern Sie nun das Skript mit cURL (oder einen anderen Browser) hinzufügen? XDEBUG_SESSION_START = ECLIPSE_DBGP auf seinem Weg (ich glaube, auch diese zusätzlich optional)
  3. Ihr Skript sollte in der Debug-Ansicht angehalten in der ersten Zeile angezeigt

Hope ths hilft.

Andere Tipps

Hier ist Tipp, wie Xdebugger Client von Locke ohne Browser auslösen:

1- Von Befehlszeile:

curl -H "Cookie: XDEBUG_SESSION=1" http://YOUR-SITE.com/your-script.php

2- Von PHP

<?php 
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, 'http://YOUR-SITE.com/your-script.php');
curl_setopt ($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=1');
curl_exec ($ch);
?>

So spielt es keine Rolle, ob Sie anhängen „XDEBUG_SESSION = 1“ zu kräuseln URL, aber was notwendig ist, ist eine richtige Cookie zu senden, zusammen mit Anfrage.

Ich weiß, dass dies ein ziemlich alten Thread, aber ich dachte, dass ich für die anderen meine Erfahrungen schreiben würde, die sich über sie kommen, wie ich mit dem gleichen Problem tat. Was ich entdeckte, ist, dass, wenn Sie debuggen remote (was ich immer tun), es gibt ein paar Einstellungen, die Sie ändern diese Arbeit machen in der php.ini haben. Hier sind diejenigen, die für mich gearbeitet:

xdebug.remote_connect_back = false
xdebug.remote_host = {client host name or IP}

Die erste Einstellung ist in der Regel „wahr“ und erzählt xdebug zu sehen für die Kunden mit der gleichen IP-Adresse, an der HTTP-Anforderung stammte. In diesem Fall jedoch kommt die Anforderung von dem Server, so dass wird nicht funktionieren. Stattdessen müssen Sie die zweite Einstellung verwenden xdebug zu sagen, wo das Client zu finden. Hoffe, das hilft ein wenig Zeit sparen jemand!

Der Debugger die einfachste Lösung auszulösen ist die Cookie-Ansatz -b XDEBUG_SESSION=ECLIPSE_DBGP für mich auf Eclipse gearbeitet zu verwenden, finden Sie unter:

curl  -H 'Content-type: application/json' \
      -b XDEBUG_SESSION="ECLIPSE_DBGP" \
      -X POST \
      -d '{"uid":200, "message":"asdsad","message_type":1}' 
      http://daxuebao.local:8083/api/message/send

Wenn Sie den Ajax-Request debuggen, ist, dass man durch den Browser geschickt in dem gleichen Navigation Kontext wie die andere (Nicht-Ajax) Anfragen -., Weshalb es gut funktioniert


Der Antrag wird von Locke in einem anderen, unterschiedlichen, kontext geschickt - und ich bin nicht sicher, können Sie den Debugger in die Haken ... Aber vielleicht ...

Zunächst einmal ist hier eine Information, die hilfreich sein könnten, unter Angabe der Xdebug Dokumentation :

  

enthält Xdebug Funktionalität zu halten   Spur einer Sitzung debuggen, wenn gestartet   Über einen Browser: Cookies. Das funktioniert   wie folgt aus:

     
      
  • Wenn die URL-Variable XDEBUG_SESSION_START=name ist   Um eine URL sendet einen Xdebug hängten   Cookie mit dem Namen   „XDEBUG_SESSION“ und als Wert der   Wert des XDEBUG_SESSION_START   URL-Parameter.
  •   
  • Wenn es ein GET (oder POST) Variable XDEBUG_SESSION_START oder die   XDEBUG_SESSION Cookie gesetzt, Xdebug   wird versuchen, zu einem debugclient.
  • verbinden   
  • Um eine Debug-Sitzung zu beenden (und das Cookie zu zerstören) einfach die URL hinzufügen   Parameter XDEBUG_SESSION_STOP.   Xdebug wird dann versuchen, nicht mehr zu machen   eine Verbindung zum debugclient.
  •   

Vielleicht könnte es funktionieren, wenn Sie das Cookie „von Hand“ gesetzt, sendet es allong die Locke Anfrage ...

Ich nehme an, Sie würden zuerst seinen Wert erhalten müssen, als Satz von Xdebug zu Beginn der Debug-Sitzung -. Wiederverwendung des Cookies in Ihrem Browser haben sollte möglich sein, obwohl

Hinweis:? Ich habe dies nie versucht - wenn Sie versuchen, und es funktioniert, könnten Sie bitte bestätigen, es funktionierte

Ich lief in das gleiche genaue Problem. Ich löste es durch die Auto-Start-Funktion drehen off in der php.ini:

xdebug.remote_autostart = 0

und dann den API-Schlüssel an die Webservice-URL, dass meine WebService Client-Aufrufe:

?XDEBUG_SESSION_START=<your API key here>

, und ich bin nicht sicher, ob diese Dinge, aber ich trat in dem API-Schlüssel in meinen Debugger (MacGDBp). Nun feuert der Debugger nur auf, wenn der webervice serverseitiges Skript aufgerufen wird, nicht, wenn der Client gestartet wird.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top