Lancer XDebug dans Netbeans sur demande externe
J'utilise Netbeans 6.7 et XDebug pour déboguer un site PHP sur ma machine, en lançant la requête depuis Netbeans (Project->Debug). Cela fonctionne bien, et est très utile.
ma question Est: est-il possible d'attacher le débogueur à n'importe quelle requête qui arrive, plutôt que ceux que je lance depuis Netbeans?
ie, au lieu de cliquer sur "Debug", mettre Netbeans dans un mode par lequel le débogueur est lancé et se fixe à la prochaine demande qui vient dans.
j'ai le sentiment que cela peut être une question stupide, mais si c'est possible, ce serait sympa.
Edit: un peu plus d'information
mon système (Ubuntu 9.04) est configuré comme suit:
contenu de /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 options de débogage sont les valeurs par défaut:
Debugger Port: 9000
Session ID: netbeans-xdebug
Stop at the First Line: ticked
My /etc/hosts
redirige le fichier www.mywebsite.com
en localhost
si je clique sur le bouton de débogage dans Netbeans, alors Firefox est lancé avec l'adresse http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
, et le débogueur fonctionne comme prévu.
mais si je me contente de parcourir http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
, cela ne démarre pas le débogueur dans Netbeans.
j'ai aussi essayé de mettre xdebug.remote_host=www.mywebsite.com
, mais ça ne fait aucune différence.
J'ai aussi activé xdebug.remote_log
, et cela montre des informations pour quand je commence à partir de netbeans, mais rien pour les demandes externes. Donc je ne pense pas que XDebug voit les requêtes externes.
4 réponses
aller à propriétés du projet > run configuration > avancé > "151920920 de débogage" url et cochez la case ne pas ouvrir le navigateur web (*). faire pas jeu de l'hôte sous débogueur proxy . enregistrer ces paramètres. dans la fenêtre de projet, sur votre projet: clic droit de la souris > débogage (cela commence l'écoute pour déboguer des connexions). aucun navigateur n'est commencé. entrez http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
dans votre navigateur. il devrait se casser en netbeans. c'est du moins ce qui se passe ici:)
( * ) vous pourriez aussi avoir à définir un path mapping - pour moi, cela fonctionne sans
par défaut xdebug ne tentera pas de se connecter à la machine distante lorsque L'argument 'Xdebug_session_start' Cookie/URL n'a pas été spécifié. Vous pouvez permettre à xdebug d'être" toujours activé", en paramétrant xdebug.remote_autostart à 1 dans le php.ini.
de plus, vous devez démarrer le débogueur PHP dans NetBeans pour que cela fonctionne. Je n'ai pas encore trouvé de meilleure solution, mais vous pouvez avoir le débogueur PHP qui écoute les connexions entrantes en commençant à déboguer au hasard fichier (utilisez Ctrl+SHIFT+F5 pour démarrer le débogage d'un fichier) et ensuite continuer (en appuyant sur F5) une fois qu'il s'est arrêté au point de rupture. Le débogueur Netbeans devrait fonctionner jusqu'à ce que vous l'arrêtiez.
mise à jour: en raison de NetBeans vérification de l'id de session (XDEBUG_SESSION_START), vous devez définir la variable idekey aussi. par exemple:
xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"
j'ai eu un problème similaire (sur NetBeans, Mac OSX), après avoir mis à jour PHP et compiler/installer xdebug. phpinfo a montré que xdebug était chargé, mais il ne se connectait toujours pas, et après avoir essayé tout ce qui est indiqué ci-dessus n'a toujours pas eu de succès. Puis j'ai essayé en réduisant le nombre de paramètres définis dans mon PHP.fichier ini de retour au minimum requis. Cela semble régler le problème pour moi.
; 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
j'ai aussi renommé xdebug par défaut.idekey à partir de netbeans-xdebug à défaut, puis de nouveau de retour.
après avoir redémarré Apache, xdebug a recommencé à fonctionner: Je ne suis pas sûr de savoir exactement ce qui l'a corrigé, mais un bon point de départ pourrait être de il suffit de commencer par le nombre minimum de paramètres xdebug dans votre php.fichier ini, puis ajouter lentement plus si vous en avez besoin. je pense que ça a peut-être quelque chose à voir avec les paramètres de trace, mais je ne peux pas en être sûr.
les réglages de base que j'ai fini par utiliser étaient:
xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug
c'est aussi une bonne idée de compiler debugclient (dans le paquet source xdebug), et de vérifier le débogage sur la ligne de commande car cela vous indiquera si xdebug peut au moins fonctionner indépendamment de votre IDE.
pas sûr de Netbeans, mais tout autre IDE que j'ai utilisé est toujours à l'écoute pour une connexion de débogage. Vous pouvez démarrer une nouvelle session de débogage à partir de xdebug en ajoutant la chaîne de requête ?XDEBUG_SESSION_START=name
à l'url. Si Netbeans écoute, cela devrait déclencher une nouvelle session de débogage.
voir http://xdebug.org/docs/remote#browser_session pour plus de détails