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:
É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 | |
For further details and definitions of the
PHP_INI_* constants, see the
Apéndice H.
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.
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:
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.