Compruebe si xdebug está funcionando


Sin instalar un editor de texto o un IDE, ¿es posible probar si xdebug está funcionando, es decir, si puede depurar código php?

La única parte que xdebug aparece en phpinfo () es la siguiente:

Adicional .archivos ini analizados /etc/php5/apache2 / conf.d / mysql.ini, /etc / php5 / apache2 / conf.d mysqli.ini,/etc / php5 / apache2 / conf.d / dop.ini, /etc / php5 / apache2 / conf.d / pdo_mysql.ini, /etc / php5 / apache2 / conf.d / xdebug.ini

No se menciona en el phpinfo() en cualquier otro lugar.

 58
Author: oshirowanen, 2012-12-27

7 answers

Sin realmente hacer algo de depuración, supongo que no puede estar seguro de que un depurador está funcionando.

Pero puede estar bastante seguro guess Supongo que uno debería asumir que si algunos aspectos de xDebug están funcionando, entonces todo estaría funcionando.

Dado esto, puede confirmar que xDebug está instalado y en su lugar probando lo siguiente:

1) phpinfo() -- esto le mostrará todas las extensiones que se cargan, incluido xDebug. Si está allí, entonces es una apuesta segura que es trabajo.

2) Si eso no es lo suficientemente bueno para usted, puede intentar usar la función var_dump(). xDebug modifica la salida de var_dump() para incluir información adicional. Si esto está en su lugar, entonces xDebug está funcionando.

3) xDebug modifica la salida de error de PHP. Si su programa se bloquea con xDebug en su lugar, obtendrá más información sobre el fallo que con la salida estándar de bloqueo de PHP.

4) xDebug también agrega una serie de funciones auxiliares a PHP. Usted podría probar cualquiera de estos para ver si está funcionando. Por ejemplo, la función xdebug_get_code_coverage() debería existir y devolver un array. Si lo hace, entonces xDebug está instalado. Si no, no lo es.

 64
Author: Spudley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-26 21:41:30

Corre

php -m -c

En su terminal, y luego busque [Zend Modules]. ¡Debería estar en algún lugar si está cargada!

NB

Si está utilizando Ubuntu, puede que no aparezca aquí porque necesita agregar la configuración de xdebug desde /etc/php5/apache2/php.ini a /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
 44
Author: Luke Madhanga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-09 11:51:48

Intente lo siguiente, debe devolver " exists "o"non exists":

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
 20
Author: KsaR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 22:59:50

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 de Ubuntu y relacionadas con Ubuntu.

Problema número 1: Las versiones 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 xdebug adecuada. En mi caso, tenía la última versión de php, pero una versión antigua de xdebug. Eso debe ser debido a mi corriente Versión 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 gestor de extensiones ordenado llamado PECL. Siga las instrucciones dadas aquí para tenerlo listo y funcionando. Primero, como 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

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

sudo pecl install php5-xdebug

Una vez que lo haga, se instalará la versión adecuada de xdebug, pero no estará lista para usar. Después de eso, tendrás que habilitarlo. He visto muchas sugerencias sobre cómo hacerlo, pero el hecho es que PHP necesita algunos módulos habilitados tanto para el cliente como para el servidor, en este caso Apache. Parece que la mejor práctica aquí es usar el método incorporado de habilitar módulos, llamado php5enmod. El uso se describe aquí.

Problema número 2: Habilitar el módulo correctamente

Primero, tendrá que ir dentro de la carpeta /etc/php5. Allí, encontrarás 3 carpetas, apache2, cli y mods_available. La carpeta mods_available contiene archivos de texto con instrucciones para activar un módulo dado. El nombre convención 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, pegar 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 el ejemplo anterior. Es imperativo que el módulo funcione. De hecho, solo copia y pega todo el código, serás una persona más feliz de esa manera. : D

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 que se nombra con números es la correcta. Ajustar el nombre a lo que ves allí, y mientras estás en ello, comprobar dentro de la carpeta para asegurarse de que la xdebug.so está realmente ahí. Debería serlo, si hiciste todo bien.

Ahora, con tu xdebug.ini creado, es el momento de habilitar el módulo. Para ello, 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 otros dentro de /etc / php5 / cli / conf.d

Reinicie su servidor Apache y escriba esto en el consola:

php -v

Usted debe 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 xdebug.ini y cargó el xdebug.so módulo. Hasta ahora todo bien.

Ahora cree un script phpinfo en algún lugar de su servidor web y ejecútelo. Esto es lo que usted debe ver, si todo fue wright:

introduzca 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. Crear un muy script simple, añadir algunas variables, darles valores, y establecer un punto de interrupción en ellos. Ahora presione CTRL + F5, haga clic en "step in" en su panel de depurador, y vea si obtiene algo como esto:

xdebug en acción

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

Depuración de configuraciones en Netbeans

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

Mis mejores deseos!

 18
Author: Théo T. Carranza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 20:57:58

Puedes ejecutar este pequeño código php

<?php
phpinfo();
?>

Copie toda la página de salida, pégalo en este enlace. Entonces analiza. Mostrará si Xdebug está instalado o no. Y dará instrucciones para completar la instalación.

 4
Author: cmb28,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-30 09:43:07

Si está utilizando Eclipse entonces tenga en cuenta que mientras se ejecuta en modo XDebug, la constante mágica __FILE__ siempre se evaluará para:

xdebug://debug-eval

Así que la siguiente comprobación devolverá true si su sesión está bajo XDebug:

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
 2
Author: Eugen Mihailescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-17 17:47:32

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 ponga xdebug config en php.ini (y eso es lo que hice) Sin EMBARGO, si la configuración se establece en /etc/php5/apache2/conf.d / xdebug.ini, entonces debería eliminar la configuración [XDebug] de /etc/php5/apache2/php.ini y ponerlo en /etc/php5/apache2 / conf.d / xdebug.ini EN SU LUGAR. Una vez eliminé /etc/php5/apache2/php.ini y poner en /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"

Entonces elimine esto del fichero /etc/php5/apache2/php.ini si lo pones allí también.

Entonces haz:

Sudo service apache2 restart

Entonces debería funcionar!!!

 1
Author: Paul Preibisch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-13 06:10:57