Compruebe si xdebug está funcionando

81

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.

oshirowanen
fuente
7
¿Lo phpinfo()informa como una extensión cargada? ¿Es eso lo que quiere decir con "trabajar"?
Wiseguy
2
Si se muestra en su phpinfo (), puede intentar hacer telnet en el puerto Xdebugs (que es 9000 por defecto)
tix3
@Wiseguy, he actualizado la pregunta. ¿Eso significa que está cargado / funcionando correctamente?
oshirowanen
@ tix3, he actualizado la pregunta. ¿Eso significa que está cargado / funcionando correctamente?
oshirowanen
2
Si la extensión está realmente cargada, debería tener su propia sección que enumere sus directivas de configuración.
Wiseguy

Respuestas:

91

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 de var_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.

Spudley
fuente
1
phpinfo () solo menciona xdebug en Additional .ini files parsed. Revisando el resto de sus sugerencias ahora.
oshirowanen
3
Solo lo intenté xdebug_get_code_coverage()y lo consigo Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
oshirowanen
7
lo suficientemente justo. Eso le dice de manera bastante concluyente que xdebug no está instalado correctamente.
Spudley
3
Solo un FYI si ese es el caso, entonces debe abrir su /etc/php/conf.d/xdebug.iniarchivo, 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
Tony Morello
@TonyMorello Creo que eso me ayudó, porque mi php.ini estaba configurado correctamente con la ruta completa, pero en Debian también hay un /mods-availabledirectorio y esa configuración de xdebug.ini estaba en conflicto (creo) con mi configuración de php.ini.
PJ Brunet
67

correr

php -m -c

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.inien /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
Luke Madhanga
fuente
17
php --versiontambién aparece con Xdebug si está cargado
mfink
1
@mfink php --versionno funciona para mí. Justo después de iniciar mi máquina, después de que Apache se inicia y funciona, php --versionmuestra Xdebug, pero phpinfo()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 ejecutar service 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.
Buttle Butkus
35

Intente lo siguiente, debe devolver "existe" o "no existe":

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
KsaR
fuente
25

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:

sudo apt-get install php5-dev

Luego, usando PECL, podrá instalar la última versión estable de xdebug:

sudo pecl install php5-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:

php5enmod xdebug

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:

php -v

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:

ingrese la descripción de la imagen aquí

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:

xdebug en acción

Recuerde verificar la configuración de Netbeans para la depuración, en herramientas / opciones / php. Debería verse algo como esto:

Configuraciones de depuración en Netbeans

Espero que esto arroje algo de luz sobre este problema confuso y bastante oscuro.

¡Los mejores deseos!

Théo T. Carranza
fuente
2
funcionó para mí, esta respuesta debería estar en el sitio xdebug o netbeans probablemente
southerton
1
He tenido que instalar el paquete de desarrolladores de PHP con el fin de obtener PECL al trabajo: sudo apt-get install php5-dev.
hasta el
Además, php5enmodno crea ningún enlace en archivos ini, funciona perfectamente sin.
hasta el
1
Una cosa más: la [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.
hasta el
¡Hola! Tiene razón sobre la instalación del paquete de desarrollador de PHP, actualizaré la publicación en consecuencia. No estoy seguro de su comentario sobre php5enmod. Crea los enlaces en las carpetas que he especificado. Y sí, la directiva [xdebug] es imperativa, actualizaré la publicación para reflejar eso también. ¡Gracias por la respuesta!
Théo T. Carranza
9

Solo para extender la respuesta de KsaR y brindar la posibilidad de verificar xdebug desde la línea de comando:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"
sopa de gulash
fuente
6

puedes ejecutar este pequeño phpcó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.

cmb28
fuente
3

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
Eugen Mihailescu
fuente
2

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 !!!

Paul Preibisch
fuente