Archivo de la etiqueta: debug

debug

Instalar Xdebug en Ubuntu (cualquier versión)

Esto es mas bien un resumen de las instrucciones que nos deja el mismo creador de Xdebug en su pagina (http://xdebug.org/docs/install) mas un par de cosas que da por entendido que debemos saber :)

1) Lo primero es bajarse el código fuente de la ultima versión de Xdebug (la 2.1 es la ultima al día de la fecha)

http://xdebug.org/files/xdebug-2.1.0.tgz

2) Descompriman el archivo en una carpeta cualquiera

De acá en mas solo nos queda compilar configurar y probar:

3) Lancen el siguiente comando para asegurarse que tienen instaladas las librerías de desarrollo de php5 que son necesarias para poder compilar Xdebug:

apt-get install php5-dev

4) Entren en la carpeta por medio de la consola:

cd /ruta/a/la/carpeta/donde/descomprimiste/los/archivos/fuente/de/xdebug/xdebug-2.1.0/

5) Lanzar el comando phpize

phpize

6) Lanzar:

./configure --enable-xdebug
make
sudo make install

Al final del infierno de outputs de salen en la consola van a apreciar que se dibuja un recuadro como el que se ve en la siguiente imagen:

Bueno, justo encima de ese recuadro pueden ver que dice algo como “Installing shared extensions: /usr/lib/php5/20090626+lfs/“. Copien esa ruta.

Ya esta instalado Xdebug. Configuremos lo XD.

7) Editemos php.ini

sudo gedit /etc/php5/apache2/php.ini

Y en la ultima linea del archivo pequen lo siguiente:

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000

NOTA: en la linea que dice “zend_extension” reemplacen la ruta del ejemplo por la que copiaron en el paso 6

8) Listo! todo en teoría funciona. para comprobarlo abran el IDE al que le tengan mas bronca y configurenlo!

Druplicon

Como ver las variables disponibles en una plantilla .tpl.php (PHPTemplate)

Otro de esos TIP que nos vienen sorprendente mente bien :).

Si estas haciendo debug sobre una plantilla y necesitas saber cuales son las variables de las que dispones sobre la misma, te habras dado con el problema de que no se pueden ver. Osea, las variables existen, y si las mandas a imprimir con un echo() seguro que ahi está, pero hasta que no lo haces no podes saber siquiera que existe.

Bueno basta de intro, vamos a un ejemplo rapido y claro:

Si pones esta función en la plantilla que querés investigar, vas a poder ver un array ($variablesDisponibles para este ejemplo) de los nombres de todas las variables de las que dispone (y de sus contenidos también):

$variablesDisponibles = get_defined_vars();

Chau!

Druplicon

Drupal 6: Mostrar los errores de PHP en lugar de la pantalla blanca (o blank page)

Suele hacer falta poder ver los errores de PHP en Drupal de vez en cuando.

Abrí el archivo index.php de Drupal y poné lo siguiente justo por encima de “require_once ‘./includes/bootstrap.inc';“:

<?php
//Reportar errores PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//Fin reportar errores PHP
debug

Configurar Xdebug en Xampp 1.7.3 con PHP 5.3.1

Si querés configurar Xdebug en linux puede interesarte el post “Instalar Xdebug en Ubuntu (cualquier versión)

Vayan a la carpeta en la que esta instalado Xampp y entren en la carpeta de PHP.
Abran php.ini y busquen:

;zend_extension = "\xampp\php\ext\php_xdebug.dll"

Quítenle el punto y coma del principio para descomentarlo (Habilitarlo).

Ahora solo queda configurar los parámetros de Xdebug:
Busquen ahora “[XDebug]“. Lo que ven por debajo de esta etiqueta es su configuración, como se que es una putada tener que andar leyendo y habilitando uno a uno les dejo una configuración funcional para que la usen. (Borren todo lo que hay por debajo de la etiqueta [xdebug] antes de pegar esta nueva configuración).

[XDebug]
xdebug.auto_trace = 0
xdebug.collect_includes = 1
xdebug.collect_params = 1
xdebug.collect_return = 1
xdebug.collect_vars = "On"
xdebug.default_enable = "On"
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD
xdebug.dump_globals = 1
xdebug.dump_once = 1
xdebug.dump_undefined = 0
xdebug.extended_info = 1
xdebug.file_link_format = ""
xdebug.manual_url = "http://www.php.net"
xdebug.max_nesting_level = 100
xdebug.overload_var_dump = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "\xampp\tmp"
xdebug.profiler_output_name = "xdebug_profile.%p"
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_mode = "req"
xdebug.remote_port = 9000
xdebug.show_exception_trace = 0
xdebug.show_local_vars = 0
xdebug.trace_output_dir = "\xampp\tmp"
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 512
xdebug.var_display_max_depth = 10

Listo, de acá en mas solo tienen que configurar su eclipse, netbeans, o lo que sea que usen.

debug

Debug remoto con Eclipse PDT y Xdebug

Mas de uno pensara que es una boludez y un riesgo de seguridad hacer esto (¡y tiene razón dependiendo de donde hagas esto!), pero piensen por un segundo que trabajan en una empresa en la que los servidores de desarrollo son justamente eso, servidores de desarrollo, y son para probar los cambios  que hiciste en tu propio ordenador.

Bien, sumále que trabajas en Windows y necesitas hacer debug para una característica que solo funciona correctamente en Linux. A que ahora tiene un poco más de sentido hacer esto :)

Bueno basta de intro, vamos a lo que vamos.

El entorno que usé es el siguiente:
Un ordenador con Windows XP que vamos a usar para hacer debug (A.K.A. “el cliente”).
Un servidor con Ubuntu 9.10 Edición Server o Desktop (A.K.A. “el servidor”).

NOTA: puede que no te haga falta específicamente estas versiones, pero son las que use para este tutorial.

  • Primero instalen en el cliente Eclipse y xampp. Prueben que funcione correctamente.

En el servidor compartan la carpeta en la que tienen instalada la página Web que pretenden debuggear (la carpeta de la página, NO “www”):

De nuevo en Windows, conéctense a un dispositivo de red (click derecho sobre “Mi PC”  que ahí lo pueden ver). Puede seguramente les pida que se autentiquen con un usuario que tenga los privilegios adecuados sobre la carpeta que tiene el proyecto en el servidor:

NOTA: Puede ser que cuando quieras guardar los cambios que hayas hecho sobre los archivos desde eclipse te de un error de permisos al escribir contra el servidor. La solución es cambiar los permisos de proyecto a 777 (chmod –R 777 carpeta_proyecto).

Ya podemos acceder al proyecto en el servidor remoto, por lo que vamos al Eclipse y creamos un proyecto de PHP como siempre, seleccionamos la unidad que se le haya asignado a la conexión del dispositivo de red y damos a finalizar.

OK, ya podemos trabajar con Eclipse sobre los archivos remotos, y eso es bueno (o no) pero el objetivo de este tutorial es el de poder debuggear, así que sigamos.

Ahora del lado del servidor hacemos lo siguiente:
Instalamos en el servidor un Xdebug.
Cuando esté instalado vamos a cambiar un parámetro de la configuración. Editemos el archivo de configuración de Xdebug:

sudo gedit /etc/php5/apache2/conf.d/xdebug.ini

Busquen xdebug.remote_host y pongan por valor la IP del cliente.
Reinicien:

sudo /etc/init.d/apache2 restart

OK. Ya tenemos el servidor que escucha al cliente por el puerto 9000, y en Eclipse tenemos montado un proyecto PHP que toma los archivos de la unidad de red conectada al servidor… Hagamos el debug!

Vamos a las preferencias de Eclipse creamos un nuevo PHP Server como podemos ver en la imagen, completando el nombre que queramos y la IP del servidor:

Vamos terminando ya. Solo nos queda configurar el debug de nuestro proyecto. Vamos a “debug configurations…” y creamos un nuevo perfil de “PHP Web Page”:

En esta imagen podemos ver como he seleccionado el servidor que acabo de crear “Servidor Remoto y desmarque el “Auto generate” para poder poner el path real hasta el archivo index.php de mi proyecto sobre el servidor.

Listo amigo. Poné un breakpoint y happy debug!.

Druplicon

Pantalla blanca al hacer /logout en Drupal

La respuesta es bastante tonta. Resulta que si tenés Devel Themer activado, va a fallarte el logout.

Para mas detalle pueden consultar este hilo de los foros de drupal que explican además como solucionarlo permanentemente si esto les molesta demasiado.

Personalmente prefiero mantener desactivado todo el tiempo Devel themer hasta que me haga falta, ya que para el desarrollo los tiempos de renderizado de la pagina se van al carajo si está activado.

PHP

Instalar XDebug en Windows 7 y XAMPP

Windows 7 es claramente el paso mas firme que ha dado Microsoft en sus ultimos 9 años con lo que respecta a su principal S.O. Y soy de los que  saben cuando han de aceptar que algo que odias ha mejorado.

Ciertamente me gusta este Windows. Básicamente vuela y es todo lo que XP no puede ser por ser tan viejo.

Lo único que me impedía cambiar definitivamente era que no podía debugear con Xdebug, y no es poco decir cuando trabajas con el.

Peeeeeeeero, gracias a Diembo que dejó un post mas que concreto pero letalmente eficaz en ihostnz, hoy puedo decir que Windows 7 pasa a ser mi sistema operativo principal por el resto de… bueno hasta que haya algo mejor.

A lo nuestro. Según nuestro amigo los pasos a seguir son:

  1. Download XAMPP 1.7.2 from sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.2/xampp-win32-1.7.2.exe/download
  2. Install
  3. Download php_xdebug-2.0.5-5.3-vc6.dll from xdebug.org/download.php
  4. Place it in C:\xampp\php\ext
  5. Edit C:\xampp\php\php.ini add:zend_extension = “C:\xampp\php\ext\php_xdebug-2.0.5-5.3-vc6.dll”[xdebug]
    xdebug.remote_enable=on
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000
    xdebug.remote_handler=”dbgp”
  6. Enjoy!

Que traducido por medio de algoritmos muy complejos nos da algo como esto:

  1. Descargar la ultima versión de XAMPP
  2. Instalarlo
  3. Descargar PHP 5.3 VC6 TS (32 bit)
  4. Poner el archivo descargado (php_xdebug-2.1.1-5.3-vc6.dll) en C:\xampp\php\ext o donde este instalado tu Xampp.
  5. Editar C:\xampp\php\php.ini y añadir al final de todo:
    zend_extension = "C:\xampp\php\ext\php_xdebug-2.1.1-5.3-vc6.dll" 
    [xdebug] 
    xdebug.remote_enable=on 
    xdebug.remote_host=127.0.0.1 
    xdebug.remote_port=9000 
    xdebug.remote_handler="dbgp" 

    Ojo, no toquen nada mas, a pesar de que van a ver que en php.ini hay configuraciones de xdebug, no hay que tocarlas.

  6. Disfrutar!

Es tan simple que da miedo, y lo peor de todo es que desde que tengo W7 nunca lo había podido hacer funcionar.

Instalar LAMP, Eclipse Xdebug y que funcione.

Me encanta Linux. no solo por lo que es, sino además por la filosofía que representa. Pero hay que reconocerlo. HAY COSAS QUE NO SON FÁCILES DE HACER CON RESPECTO A WINDOW$ O Mac OSX. Digo esto porque para instalar un entorno de desarrollo para PHP en windows solo tenés que instalar xampp, des comentar las lineas que habilitan Xdebug en php.ini, descargar Eclipse-pdt y descomprimirlo donde quieras.
hecho lo anterior ya tenés a disposición un entorno totalmente funcional, y lo que es mejor, en 5 minutos y sin quemarte la cabeza.

La cosa cambia en linux. estoy escribiendo esto porque me hace falta documentar para mi el como hacer lo que acabo de hacer y porque creo que esto es algo que le puede servirle a alguien mas.

Resumiendo rápidamente los pasos son estos:
Descargar la ultima versión de PDT (la versión de eclipse completa, no el plugin solo) (enlace)
NOTA: se puede descargar una versión base de eclipse desde repositorios pero es un dolor de cabeza agregarle el plugin de PDT.
Instalar LAMP desde los repositorios, abriendo Synaptic y yendo al menú “editar”->”Marcar paquetes por tarea…”
instalar Xdebug desde los repositorios también.

Instalado y descargado todo vamos a configurar.

Descompriman y copien lo a /opt/ y cambien los permisos:

sudo chmod -R 755 /opt/eclipse/

Eclipse ya funciona, ahora configuremos Xdebug.
Abrimos php.ini y agregamos al final del archivo lo siguiente

zend_extension=/usr/lib/php5/20051025/xdebug.so
[debug]
; Remote settings
xdebug.remote_autostart=off
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=
; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32
; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32

Una sola cosa a tener en cuenta en este punto es que la primera linea del código anterior hace referencia a una carpeta que puede cambiar de nombre con cada versión de Xdebug, por lo que no estaría de mas que miren que la carpeta no haya cambiado de nombre, y si es así, lo ajustan.

Un detalle mas es que la carpeta /var/www no tiene permisos de escritura, y ya que es un entorno de desarrollo (esa es la idea) le vamos a dar todos los permisos.

Ahora ya funciona todo.

Debug PHP con Xdebug y Eclipse 3.x en Windows de la manera fácil

Esta es la forma rápida y sin complicaciones :)

Bien, resulta que Xampp ya tiene de serie Xdebug y está activado. por lo que solo deberiamos arrancar los servicios de apache y Mysql.

Lo siguiente es configurar Eclipse .

lo abrimos y vamos al menú Window -> preferences y veremos que hay un filtro de búsqueda arriba de todo.
buscamos “Web browser” y marcamos “Use external web browser” para que al debuggear podamos hacerlo con nuestro navegador predeterminado (o sea Firefox).

En el caso de que nuestro proyecto use extensiones particulares como *.module, *.inc, etc tenemos que agregar esas extensiones para que eclipse las tome como código PHP.
Eso lo hacemos buscando “Content Types“.  Podrán ver que a la derecha hay un árbol de extensiones que tienen como padre “Text“, y dentro está “PHP Content Type“. Allí mismo están definidas las extensiones mas comunes.  Pues solo tenemos que Añadir las nuestras como se ve en la imagen.

Vamos a configurar Xdebug:

Buscamos en las preferencias PHP -> Debug.  Allí cambiamos “Zend Debugger” por “Xdebug” y entramos en la configuración del mismo que podemos encontrar justo a su derecha.
Esta es la imagen de la configuración de Xdebug:

Por ultimo aplicamos y aceptamos todos los cambios.
Ya tenemos configurado eclipse, así que vamos a crear nuestro proyecto:

Vamos a file -> new->PHP project

le damos un nombre al proyecto (atención a esto: no se por que, pero si ya tenemos una carpeta con nuestro desarrollo y le damos un nombre distinto al proyecto, vamos a tener problemas de todo tipo, por lo que por ahora llamen con el mismo nombre la carpeta y el proyecto.), y si ya tenian un proyecto en desarrollo lo importamos por medio de la opción “Create project from existing source” y seleccionar dicha carpeta.

Hecho lo anterior le damos aceptar.

Vemos que nuestro proyecto esta cargado en Eclipse, por lo que solo nos queda un paso.

Abran el index.php (o como estén llamando a su pagina principal) y vayan al icono del escarabajo como se ve en la imagen.

Eclipse configurar debug para un proyecto

Por ultimo haceos doble clic sobre “PHP web page” y rellenamos los campos que he resaltado en esta imagen.

Si todo salio bien, al momento de presionar en debug se habrá abierto una nueva ventana/pestaña en el navegador con la url del proyecto y un añadido del tipo http://localhost/mi_proyecto/index.php?XDEBUG_SESSION_START=ECLIPSE_DBGP&KEY=12407703304061 lo que nos indica que estamos debuggeando con Xdebug que a su ves esta siendo escuchado por eclipse.

Ahora solo queda usar las miles de virtudes de este fabuloso IDE.

Notas de interés:

Eclipse-pdt y Xampp se pueden ejecutar sin instalación, por lo que no estaría nada mal que agarren ambos programas instalados y configurados y los copien a una carpeta de backups. esto lo comento porque es muy util tener un entorno de desarrollo portable.