re: iainargent at hotmail dot com
i've been able to run pecl install apd against PHP 5.2.4 without any issues, although you are right, development seems to have completely ceased
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.
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.
| 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.
- 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
-
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.
TipSi 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.
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.
Table of Contents
- 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
APD
08-Nov-2007 02:50
08-Nov-2007 12:40
Development seems to have ceased on this project. It doesn't work with PHP 5.2 and this bug has been open for nearly a year now.
http://pecl.php.net/bugs/bug.php?id=9329
08-May-2006 08:52
if you are looking for better/different alternatives to APD, check the xdebug website http://www.xdebug.org or download it from PECL http://pecl.php.net/xdebug
22-May-2005 11:53
Locate the root-cause of defects, fast.
If you need to locate the source of a defect in complicated web-based PHP applications with lots of conditional includes (osCommerce and Zen-Cart are reasonably complex), use APD to create a profile dump.
Then filter the dump for lines containing "!" to produce a list of included (required) files in the order they were included.
On my Win98 dev box I use: find "!" dumpfile > trace_program.txt
I use the trace_program.txt to backtrack to the root-cause of defects appearing in the browser. Great for maintaining systems you did not build yourself.
05-Apr-2005 08:52
Some useful links on APD:
1. Profiling PHP Applications ( http://www.schlossnagle.org/~george/talks/Profiling-phpworks-2004.pdf ), [1.40 MB], George Schlossnagle, 2004-09-23
2. PHP Performance Profiling ( http://www.linuxjournal.com/article/7213 ), [13.16 KB], Jonathan Oxer, 2003-10-21
3. APD Wiki ( http://www.wiki.cc/php/Apd )
HTH,
R. Rajesh Jeba Anbiah
25-Jan-2005 05:15
If pprofp reports 'No such file or directory', it's probably because it contains an incorrect path to your php client. Open pprofp in your fav editor, edit the first line, and try again.
