2010-07-20 11 views
5

Ho installato Xdebug 2.1 e in esecuzione con PHP 5.2.13. Può connettersi correttamente a più client DBGP (ad esempio, lo xdebug.remote_log mostra la comunicazione avanti e indietro e anche i client stessi mostrano la connessione in ingresso), ma non si ferma ai punti di interruzione. Ho provato NetBeans, MacGDBp e anche la riga di comando debugclient in bundle con Xdebug.Xdebug si connette correttamente ai client DBGP, ma non si fermerà ai punti di interruzione

Un tipico scambio assomiglia:

Log opened at 2010-07-20 09:33:17 
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/hgfs/htdocs/mycompany/index.php" language="PHP" protocol_version="1.0" appid="14371" idekey="macgdbp"><engine version="2.1.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2010 by Derick Rethans]]></copyright></init> 

<- status -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="starting" reason="ok"></response> 

<- step_into -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="macgdbp" status="stopping" reason="ok"></response> 

<- status -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="stopping" reason="ok"></response> 

Log closed at 2010-07-20 09:33:18 

NetBeans tenta di impostare punti di interruzione, e questi sono riconosciuti da Xdebug:

<- breakpoint_set -i 7 -t line -s enabled -f file:///mnt/hgfs/htdocs/mycompany/index.php -n 9 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" state="enabled" id="139360004"></response> 

Tuttavia, Xdebug rifiuta ancora di smettere!

risposta

7

Questo sembra accadere se si dispone di aver Xdebug caricato come un extension (vale a dire extension=xdebug.so) nella configurazione di PHP al posto di un zend_extension (vale a dire zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so).

Assicurarsi che non si dispone di una linea di extension=xdebug.soovunque in PHP config, anche se sei abbastanza sicuro che si sta utilizzando zend_extension. Ad esempio, se si dispone di zend_extension in /etc/php5/conf.d/xdebug.ini, questo potrebbe essere sostituito da uno extension in /etc/php5/apache2/php.ini. Se questo è il caso, nulla si lamenterà, e phpinfo() segnalerà doverosamente che Xdebug è stato caricato! (Xdebug 2.1 fa emettere un piccolo avviso in phpinfo() quando vengono caricati come estensione, ma le versioni precedenti non fanno nulla.)

+0

Wow, questo mi ha davvero salvato dopo aver ottenuto un comportamento strano configurando il debug remoto con MacGDBP. Potevo vedere che le connessioni avevano successo con xdebug.remote_log, e il client stava ricevendo connessioni, ma le connessioni venivano rapidamente eliminate. Non c'era nemmeno uscita nel client. Modificato "extension = xdebug.so" come suggerito e boom tutto funziona magnificamente. – milesw

+0

Lei ha fatto la mia giornata. Se potessi, vorrei revocare un migliaio di volte. – Bgi

0

è necessario aggiungere il percorso completo al file xdebug.so, anche quando è inserito nella cartella php/modules/, come zend_extension non appare in questa cartella per impostazione predefinita.

Se si dispone di una riga exension=xdebug.so, xdebug verrà caricato ma non si fermerà ai punti di interruzione (mi colpisce perché).

Rimuovere tutto il exension=xdeabug.so (anche dal file cli ini, che carica anche) e aggiungere zend_extension risolverà il problema.

+0

questo basta ripetere tutto ciò che viene detto da @mjs ... Una risposta a una domanda che ha 2 anni dovrebbe essere migliore di questa. –

+0

Stavo solo chiarendo che è necessario utilizzare il percorso completo, dice "zend_extension =/usr/lib/php5/20060613 + lfs/xdebug.so" ma ho pensato che usasse questo percorso perché aveva una versione compilata lì o altro, come ho messo il xdebug.so nella cartella php/modules non ho messo il percorso completo (come si fa con la direttiva "estensione") e che non ha funzionato. – maxidirienzo

0

Se i file php sono posizionati nella cartella symlink, XDebug funzionerà con il percorso della cartella di origine anziché con il percorso della cartella symlink!

Quindi, per attivare i punti di interruzione è necessario configurare i mapping di percorso in vostro IDE per le cartelle collegamenti simbolici e file

0

So che questo è stato risposto, ma mi sono imbattuto lo stesso problema solo voglia di offrire la mia risposta se qualcun altro attraversa Questo. Per sbaglio ho perso un valore di caso nei miei percorsi che mi permetteva comunque di connettermi ed eseguire il debugger ma non si fermava ai miei breakpoint. Non me ne sono reso conto fino a tanta frustrazione, quindi voglio solo che la gente sappia che potrebbe essere una possibilità.

Problemi correlati