Sin instalar un editor de texto o un IDE, ¿es posible probar si xdebug está funcionando, es decir, si puede depurar el código php?
La única parte que aparece xdebug en phpinfo () es la siguiente:
Archivos .ini adicionales analizados /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini
No se menciona en phpinfo () en ningún otro lugar.
phpinfo()
informa como una extensión cargada? ¿Es eso lo que quiere decir con "trabajar"?Respuestas:
Sin realmente realizar alguna depuración, supongo que no puede estar seguro de que un depurador esté funcionando.
Pero puede estar bastante seguro: supongo que se debe suponer que si algunos aspectos de xDebug funcionan, entonces todo funcionará.
Dado eso, puede confirmar que xDebug está instalado y en su lugar al intentar lo siguiente:
1)
phpinfo()
: esto le mostrará todas las extensiones que están cargadas, incluido xDebug. Si está ahí, es seguro que está funcionando.2) Si eso no es lo suficientemente bueno para usted, puede intentar usar la
var_dump()
función. xDebug modifica la salida devar_dump()
para incluir información adicional. Si está en su lugar, entonces xDebug está funcionando.3) xDebug modifica la salida de error de PHP. Si su programa falla con xDebug en su lugar, obtendrá más información sobre la falla que con la salida estándar de PHP.
4) xDebug también agrega una serie de funciones auxiliares a PHP. Puede probar cualquiera de estos para ver si funciona. Por ejemplo, la función
xdebug_get_code_coverage()
debería existir y devolver una matriz. Si es así, entonces xDebug está instalado. Si no, no lo es.fuente
Additional .ini files parsed
. Revisando el resto de sus sugerencias ahora.xdebug_get_code_coverage()
y lo consigoFatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5
./etc/php/conf.d/xdebug.ini
archivo, que es el que se menciona en los archivos .ini adicionales analizados, y descomentar todas las líneas que contiene.zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
/mods-available
directorio y esa configuración de xdebug.ini estaba en conflicto (creo) con mi configuración de php.ini.correr
en su terminal y luego busque
[Zend Modules]
. ¡Debería estar en algún lugar allí si está cargado!nótese bien
Si está usando Ubuntu, es posible que no aparezca aquí porque necesita agregar la configuración de xdebug desde
/etc/php5/apache2/php.ini
en/etc/php5/cli/php.ini
. Los míos son[xdebug] zend_extension = /usr/lib/php5/20121212/xdebug.so xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=localhost xdebug.remote_port=9000
fuente
php --version
también aparece con Xdebug si está cargadophp --version
no funciona para mí. Justo después de iniciar mi máquina, después de que Apache se inicia y funciona,php --version
muestra Xdebug, perophpinfo()
no muestra una sección xdebug. Y la ejecución del script PHP no se detiene en los puntos de interrupción. Después de ejecutarservice apache2 restart
,phpinfo()
muestra la sección xdebug y la depuración funciona. Entonces, por alguna razón, xdebug no se carga cuando Apache se inicia durante el arranque de la máquina. Entonces, por ahora, tengo que reiniciar Apache después de cada arranque.Intente lo siguiente, debe devolver "existe" o "no existe":
<?php echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
fuente
Después de una amarga carrera de casi 24 horas tratando de hacer que xdebug funcione con Netbeans 8.0.2, he encontrado una solución que, espero, funcionará para todas las pilas relacionadas con Ubuntu y Ubuntu.
Problema número 1: las versiones de PHP y xdebug deben ser compatibles
A veces, si está ejecutando una configuración de Linux y apt-get para instalar xdebug, no obtendrá la versión adecuada de xdebug. En mi caso, tenía la última versión de php pero una versión antigua de xdebug. Eso debe ser debido a mi versión actual de Xubuntu. Las versiones de software dependen de los repositorios, que dependen de la versión del sistema operativo que esté ejecutando.
Solución: PHP tiene un administrador de extensiones ordenado llamado PECL. Siga las instrucciones que se dan aquí para tenerlo en funcionamiento. Primero, como lo señaló un miembro en los comentarios, debe instalar el paquete de desarrollador de PHP para que PECL funcione:
Luego, usando PECL, podrá instalar la última versión estable de xdebug:
Una vez que lo haga, se instalará la versión correcta de xdebug, pero no estará lista para usar. Después de eso, deberá habilitarlo. He visto muchas sugerencias sobre cómo hacerlo, pero el hecho es que PHP necesita que algunos módulos estén habilitados tanto para el cliente como para el servidor, en este caso Apache. Parece que la mejor práctica aquí es utilizar el método integrado para habilitar módulos, llamado php5enmod. El uso se describe aquí .
Problema número 2: habilite el módulo correctamente
Primero, deberá ingresar a la carpeta / etc / php5. Allí, encontrará 3 carpetas, apache2, cli y mods_available. La carpeta mods_available contiene archivos de texto con instrucciones para activar un módulo determinado. La convención de nombres es [módulo] .ini. Eche un vistazo dentro de algunos de ellos, vea cómo están configurados.
Ahora tendrás que crear tu archivo ini dentro de la carpeta mods_available. Cree un archivo llamado xdebug.ini y, dentro del archivo, pegue esto:
[xdebug] zend_extension = /usr/lib/php5/20121212/xdebug.so xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=localhost xdebug.remote_port=9000
Asegúrese de que la directiva [xdebug] esté presente, exactamente como en el ejemplo anterior. Es imperativo que el módulo funcione. De hecho, simplemente copie y pegue todo el código, así será una persona más feliz. :RE
Nota: la ruta zend_extension es muy importante. En este ejemplo, está apuntando a la versión actual del motor PHP, pero primero debe ir a / usr / lib / php5 y asegurarse de que la carpeta nombrada con números sea la correcta. Ajuste el nombre a lo que vea allí, y mientras lo hace, verifique dentro de la carpeta para asegurarse de que xdebug.so esté realmente allí. Debería serlo, si hiciste todo bien.
Ahora, con su xdebug.ini creado, es el momento de habilitar el módulo. Para hacer eso, abra una consola y escriba:
Si todo salió bien, PHP creó dos enlaces a este archivo, uno dentro de /etc/php5/apache2/conf.d y otro dentro de /etc/php5/cli/conf.d
Reinicie su servidor Apache y escriba esto en la consola:
Debería obtener algo como esto:
PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans
Lo que significa que el cliente PHP leyó su archivo xdebug.ini y cargó el módulo xdebug.so. Hasta ahora tan bueno.
Ahora cree un script phpinfo en algún lugar de su servidor web y ejecútelo. Esto es lo que debería ver, si todo salió bien:
Si ve esto, Apache también cargó el módulo y probablemente esté listo para comenzar. Ahora veamos si Netbeans depurará correctamente. Cree un script muy simple, agregue algunas variables, déles valores y establezca un punto de interrupción en ellas. Ahora presione CTRL + F5, haga clic en "entrar" en su panel de depuración y vea si obtiene algo como esto:
Recuerde verificar la configuración de Netbeans para la depuración, en herramientas / opciones / php. Debería verse algo como esto:
Espero que esto arroje algo de luz sobre este problema confuso y bastante oscuro.
¡Los mejores deseos!
fuente
sudo apt-get install php5-dev
.php5enmod
no crea ningún enlace en archivos ini, funciona perfectamente sin.[xdebug]
directiva en el archivo ini es crucial para que funcione. Estaba confundido por el hecho de que, en el archivo ini original,[xdebug]
faltaba, pero para mí no funcionó sin.Solo para extender la respuesta de KsaR y brindar la posibilidad de verificar xdebug desde la línea de comando:
fuente
puedes ejecutar este pequeño
php
código<?php phpinfo(); ?>
Copie toda la página de salida, péguela en este enlace . Luego analiza. Mostrará si Xdebug está instalado o no. Y le dará instrucciones para completar la instalación.
fuente
Si está utilizando Eclipse , tenga en cuenta que mientras se ejecuta en modo XDebug, la constante mágica __FILE__ siempre se evaluará para:
xdebug://debug-eval
Entonces, la siguiente verificación será verdadera si su sesión está bajo XDebug:
$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
fuente
en su pregunta mencionó que su phpinfo estaba indicando que apache estaba cargando la configuración de xdebug en /etc/php5/apache2/conf.d/xdebug.ini En muchas de las instrucciones en línea, puede notar que le piden que coloque la configuración de xdebug en php .ini (y eso es lo que hice) SIN EMBARGO, si la configuración está establecida en /etc/php5/apache2/conf.d/xdebug.ini, entonces debería eliminar las opciones de configuración [XDebug] de / etc / php5 / apache2 /php.ini y colóquelo en /etc/php5/apache2/conf.d/xdebug.ini INSTEAD. Una vez que eliminé de /etc/php5/apache2/php.ini y puse /etc/php5/apache2/conf.d/xdebug.ini en su lugar, y reinicié apache, ¡funcionó!
Por lo tanto, en su /etc/php5/apache2/conf.d/xdebug.ini, ponga lo siguiente:
[XDebug] zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so" xdebug.remote_enable=1 xdebug.remote_port="9000" xdebug.profiler_enable=1 xdebug.profiler_output_dir="/home/paul/tmp" xdebug.remote_host="localhost" xdebug.remote_handler="dbgp"; xdebug.idekey="phpstorm_xdebug"
luego elimínelo de /etc/php5/apache2/php.ini si lo coloca allí también.
Entonces hazlo:
reinicio de apache2 del servicio sudo
¡¡¡Entonces debería funcionar !!!
fuente