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). |
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) |
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.
El comportamiento de estas funciones est谩 afectado por los valores definidos en php.ini.
Tabla 1. Opciones de configuraci贸n de APD
| Nombre | Valor predeterminado | Cambiable | Registro de cambio |
|---|---|---|---|
| apd.dumpdir | NULL | PHP_INI_ALL | |
| ini.apd.statement-tracing | "0" | PHP_INI_ALL |
A continuaci贸n se presenta una corta explicaci贸n de las directivas de configuraci贸n.
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().
Especifica si se hacen o no an谩lisis por l铆nea. Activ谩ndolo (1) impactar谩 en el desempe帽o de su aplicaci贸n.
Esta extensi贸n no tiene ning煤n tipo de recurso definido.
Esta extensi贸n no tiene ninguna constante definida.
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.
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
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.
Para generar una estructura de llamados a un archivo que pueda importar a la aplicaci贸n de an谩lisis KCacheGrind, emita el comando pprof2calltree.
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.