Depurador avanzado de PHP

IV. Depurador avanzado de PHP

Introducci贸n

APD (por sus siglas en ingl茅s) es el depurador avanzado de PHP. Fue escrito para proporcionar la capacidad de analizar y depurar el c贸digo PHP, as铆 como tambi茅n proporcionar la capacidad de imprimir una completa descripci贸n acerca de errores en las aplicaciones. APD soporta la depuraci贸n interactiva, pero por omisi贸n escribe informaci贸n para localizar archivos. Adem谩s ofrece registros basados en eventos de tal manera que los diversos niveles de informaci贸n (incluyendo llamados a funciones, argumentos pasados, int茅rvalos de tiempo entre cambios en un documento, etc.) puedan ser activados o desactivados por scripts individuales.

Atenci贸n

APD es una extensi贸n Zend, modifica la manera interna en la que PHP maneja los llamados a funciones, y en este sentido pudiera o no pudiera ser compatible con otras extensiones Zend (por ejemplo Zend Optimizer).

Instalaci贸n

APD se encuentra actualmente disponible como una extensi贸n PECL en http://pecl.php.net/package/apd. Aseg煤rese de tener instalada la versi贸n CGI de PHP y de que est茅 disponible en su ruta actual acompa帽ado con el script phpize.

Ejecute el siguiente comando para descargar, estructurar e instalar la 煤ltima versi贸n estable de APD:
pear install apd

脡sto instala autom谩ticamente el m贸dulo APD Zend en su directorio de extensiones de PHP. No es obligatorio mantenerlo all铆; es posible almacenar el m贸dulo en cualquier directorio que PHP pueda leer mientras establezca adecuadamente el par谩metro zend_extension.

Los usuarios de Windows pueden descargar la extensi贸n dll php_apd.dll desde http://snaps.php.net/win32/PECL_STABLE/.

En su archivo INI, agregue las siguientes l铆neas:

zend_extension = /absolute/path/to/apd.so
apd.dumpdir = /absolute/path/to/trace/directory
apd.statement_tracing = 0

Dependiendo de su instalaci贸n de PHP, la directiva zend_extension puede ser una de las siguientes:

zend_extension              (non ZTS, non debug build)
zend_extension_ts           (    ZTS, non debug build)
zend_extension_debug        (non ZTS,     debug build)
zend_extension_debug_ts     (    ZTS,     debug build)

Instalar en Win32

Para instalar APD bajo Windows necesita un entorno de compilaci贸n PHP en funcionamiento como se describe en http://php.net -- b谩sicamente, se requiere tener Microsoft Visual C++, win32build.zip, bison/flex, y saber c贸mo usarlo. Adem谩s aseg煤rese de que adp.dsp tenga terminaciones de l铆neas en modo DOS; si tiene terminaciones de l铆neas en modo UNIX, Microsoft Visual C++ se quejar谩 al respecto.

Configuraci贸n en tiempo de ejecuci贸n

El comportamiento de estas funciones est谩 afectado por los valores definidos en php.ini.

Tabla 1. Opciones de configuraci贸n de APD

NombreValor predeterminadoCambiableRegistro de cambio
apd.dumpdirNULLPHP_INI_ALL 
ini.apd.statement-tracing"0"PHP_INI_ALL 
For further details and definitions of the PHP_INI_* constants, see the Ap茅ndice G.

A continuaci贸n se presenta una corta explicaci贸n de las directivas de configuraci贸n.

apd.dumpdir string

Establece el directorio en el cual APD escribe la salida del an谩lisis de los archivos. Puede especificar una ruta absoluta o relativa.

Puede especificar un directorio diferente como un argumento a apd_set_pprof_trace().

apd.statement_tracing boolean

Especifica si se hacen o no an谩lisis por l铆nea. Activ谩ndolo (1) impactar谩 en el desempe帽o de su aplicaci贸n.

Tipos de recursos

Esta extensi贸n no tiene ning煤n tipo de recurso definido.

Constantes predefinidas

Esta extensi贸n no tiene ninguna constante definida.

C贸mo usar PHP-APD en sus scripts

  1. En la primera l铆nea de su script PHP, ejecute la funci贸n apd_set_pprof_trace() para iniciar el an谩lisis:

    apd_set_pprof_trace();

    Puede insertar la l铆nea en cualquier parte de su script, pero si no inicia el an谩lisis al comienzo de su script descarta el examen de informaci贸n que de otra manera pudiera llevarlo a un atascamiento en el desempe帽o.

  2. Ahora ejecute su script. La salida ser谩 escrita en apd.dumpdir/pprof_pid.ext.

    Sugerencia: Si est谩 ejecutando la versi贸n CGI de PHP, necesitar谩 agregar la opci贸n '-e' para habilitar una ampliaci贸n de la informaci贸n con la finalidad de que apd funcione apropiadamente. Por ejemplo: php -e -f script.php

  3. Para mostrar la informaci贸n analizada con formato, emita el comando pprofp con las opciones de ordenamiento y visualizaci贸n de su preferencia. La salida con formato ser谩 algo como:
    bash-2.05b$ pprofp -R /tmp/pprof.22141.0
    
    Trace for /home/dan/testapd.php
    Total Elapsed Time = 0.00
    Total System Time  = 0.00
    Total User Time    = 0.00
    
    
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
    56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
    28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
    14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace

    La opci贸n -R usada en este ejemplo ordena la tabla analizada por la cantidad de tiempo real que el script tard贸 ejecutando una funci贸n dada. La columna "cumm call" revela cu谩ntas veces fue llamada cada funci贸n, y la columna "s/call" revela cu谩ntos segundos fueron necesarios para cada funci贸n, en promedio.

  4. Para generar una estructura de llamados a un archivo que pueda importar a la aplicaci贸n de an谩lisis KCacheGrind, emita el comando pprof2calltree.

Informaci贸n de contacto

Si tiene comentarios, soluciones a fallos, mejoras o quiere ayudar a desarrollar esta bestia, puede enviar un correo a apd@mail.communityconnect.com. Cualquier ayuda es bien recibida.

Tabla de contenidos
apd_breakpoint -- Detiene el int茅rprete y espera un retorno de carro desde el socket
apd_callstack -- Devuelve la pila actual de llamados como una matriz
apd_clunk -- Lanza una advertencia y una pila de llamadas
apd_continue -- Reinicia el int茅rprete
apd_croak -- Lanza un error, una pila de llamadas y detiene la ejecuci贸n
apd_dump_function_table -- Imprime la tabla actual de funciones
apd_dump_persistent_resources -- Devuelve todos los recursos persistentes como una matriz
apd_dump_regular_resources -- Devuelve todos los recursos regulares actuales como una matriz
apd_echo -- Imprime hacia el socket de depuraci贸n
apd_get_active_symbols -- Obtiene una matriz de los nombres de las variables actuales en el 谩mbito local
apd_set_pprof_trace -- Inicia la depuraci贸n de la sesi贸n
apd_set_session_trace -- Inicia la depuraci贸n de la sesi贸n
apd_set_session -- Cambia o establece el nivel de depuraci贸n actual
apd_set_socket_session_trace -- Inicia la depuraci贸n remota de la sesi贸n
override_function -- Sobreescribe funciones incorporadas
rename_function -- Renombra nombre_original a nombre_nuevo en el s铆mbolo function_table global