7
votes

Utilisation de xdebug pour tracer une page de service Web PHP

J'utilise Eclipse et XDebug pour développer une application PHP qui s'appuie sur les services Web. J'ai des pages de test qui consomment mes services de 2 façons: Ajax (en utilisant JQuery) et Curl.

I Ajouter des points d'arrêt à ma page de service et lancez le débogueur. Lorsque j'appelle le service d'Ajax, l'exécution s'arrête bien au point d'arrêt, et je reçois mes variables, contrôle étape par étape, etc.

Mais lorsque j'appelle le service à l'aide de CURL (c'est-à-dire à partir d'une page PHP), les points d'arrêt ne fonctionnent pas. Même si j'allume la "pause à la première ligne" d'option de débogueur, je ne peux pas obtenir l'exécution de s'arrêter lorsque vous utilisez CURL.

Est-ce un comportement de débogueur? Dois-je ajouter un auditeur à mes appels de boucle? Modifier l'URL? Ou est-ce une limitation de xdebug?

Merci pour votre temps et vos efforts, Gars


0 commentaires

6 Réponses :


2
votes

Lorsque vous déboguez la demande AJAX, celle-ci est envoyée par le navigateur, dans le même contexte de navigation que les demandes (non-Ajax) - c'est pourquoi cela fonctionne bien. < / p>


La demande envoyée par CURL est dans une autre, différente, context - et je ne suis pas sûr que vous puissiez accrocher le débogueur dans celui-ci ... mais, peut-être ...

Tout d'abord, voici une information qui pourrait prouver utile, citant le Documentation de XDebug :

xdebug contient des fonctionnalités à garder Suivi d'une session de débogage lors du lancement À travers un navigateur: des cookies. Cela marche comme ceci:

  • Lorsque la variable URL xdebug_session_start = nom est annexé à une URL xdebug émet un Cookie avec le nom " xdebug_session " et comme valeur le Valeur du xdebug_session_start Paramètre URL.
  • Quand il y a une variable get (ou post) xdebug_session_start ou xdebug_session cookie est défini, xdebug va essayer de se connecter à un débognient.
  • arrêter une session de débogage (et détruire le cookie) ajout simplement l'URL Paramètre xdebug_session_stop . Xdebug n'essaiera alors plus de faire une connexion au débogclient.

    Peut-être que cela pourrait fonctionner si vous définissez ce cookie "à la main", envoyez-le allongez la demande de courbure ...

    Je suppose que vous devriez d'abord avoir sa valeur, comme défini par Xdebug au début de la session de débogage - à utiliser le cookie que vous avez dans votre navigateur devrait être possible, cependant.

    Remarque: Je n'ai jamais essayé cela - si vous essayez, et cela fonctionne, pourriez-vous s'il vous plaît confirmer cela fonctionnait?


3 commentaires

Ne fonctionne pas. J'ai ajouté? Xdebug_session_start = eclipse_dbgp & clé = 12632513094615 à chaque URL CURL (je prends les valeurs de mon URL comme lancé par Eclipse - la clé change à chaque fois). J'ai vérifié que c'est l'URL qui passe en boucle - en vain.


Est-ce le même nom de session que vous utilisez sur Eclipse?


Publiez un appel à Curl à l'aide de Cookie Curl_setopt ($ ch, curlopt_cookie, "xdebug_session = 1") ou envoyer une URL param xdebug_session_start n'a jamais travaillé pour moi.



9
votes

Je ne peux pas encore commenter, alors je poste cela comme une réponse.

Pouvez-vous déboguer plus d'une demande AJAX en une seule session? Votre session de débogage était-elle toujours en cours d'exécution à Eclipse lorsque vous avez essayé de déboguer en utilisant Curl?

Description sur la façon dont cela fonctionne pour moi:

  1. Démarrer la session de débogage avec un simple fichier debug.php qui contient uniquement un et rien d'autre. Il s'arrête sur la première ligne, vous "continuez" et il finit l'exécution.
  2. Demandez maintenant le script à l'aide de CURL (ou d'un autre navigateur) Ajoutez? xdebug_session_start = Eclipse_dbgp sur son chemin (je pense même que cette addition est facultative)
  3. Votre script doit apparaître dans la vue de débogage arrêté à la première ligne

    Hope THS aide.


4 commentaires

Merci d'avoir essayé Jan. Oui, je peux déboguer plus d'un appel Ajax et oui, ma session de débogage est toujours en cours d'exécution à Eclipse. Et comme vous pouvez le voir ci-dessous, j'ai essayé d'ajouter xdebug_session_start = ECLIPSE_DBGP à mon appel CURL - en vain.


@Traveling Tech Guy: Je vais essayer ce demain au travail. J'ai 99% sûr que cela fonctionne pour moi, nous allons donc le faire fonctionner pour vous aussi.


Oui, essayé encore et ça marche. Vous n'avez pas besoin de clé, xdebug_session_start suffit. Ensuite, cela fonctionne dans chaque navigateur et que je me connecte au serveur, ma session de débogage est en cours d'exécution. Avez-vous vérifié votre journal de demande si la demande de courbure fait vraiment la bonne chose?


Seuls xdebug_session_start ne fonctionne pas pour moi, je dois ajouter un paramètre clé à l'URL get / film? xdebug_session_start = eclipse_dbgp & clé = 14297182897315 fonctionne.



2
votes

J'ai couru dans ce même problème exact. Je l'ai résolu en tournant la fonction de démarrage automatique éteint em> dans php.ini: xxx pré>

puis ajoute la touche API à l'URL WebService que mon client WebService appelle: P>

?XDEBUG_SESSION_START=<your API key here>


0 commentaires

9
votes

Conseil sur la manière de déclencher le client XDEBugger de CURL sans navigateur:

1- de la ligne de commande: xxx

2- de PHP < Pré> xxx

de sorte que cela n'a pas d'importance si vous attachez "xdebug_session = 1" à CURL URL, mais ce qui est nécessaire, c'est d'envoyer un cookie approprié avec demande.


0 commentaires

5
votes

Je sais que c'est un joli vieux fil, mais je pensais poster mon expérience pour d'autres qui pourraient survenir, comme je l'ai fait, avec le même problème. Ce que j'ai découvert, c'est que si vous déboguez à distance (que je fais toujours), il y a quelques paramètres que vous devez changer chez PHP.ini pour faire ce travail. Voici celles qui ont fonctionné pour moi: xxx

Le premier réglage est normalement "vrai" et indique à XDebug de rechercher le client à la même adresse IP où la requête HTTP est originaire. Dans ce cas cependant, la demande provient du serveur, de sorte que cela ne fonctionnera pas. Au lieu de cela, vous devez utiliser le deuxième réglage pour indiquer à XDebug où trouver le client. J'espère que cela aide à sauver un peu de temps!


0 commentaires

3
votes

Pour déclencher le débogueur La solution la plus simple consiste à utiliser l'approche de cookie -b xdebug_session = eclipse_dbgp code> a fonctionné pour moi sur Eclipse, voir ci-dessous:

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


0 commentaires