|
|
 |
IV. Depurador avanzado de PHP
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 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.
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.
add a note
User Contributed Notes
Depurador avanzado de PHP
bugbuster at darrencampbell dot com dot au
22-May-2005 01: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.
yoghurtmetperzik at gmail dot com
25-Jan-2005 07: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.
| |
| | Citas célebres | Mi interés por el futuro se debe a que voy a pasar el resto de mi vida. Charles F. Kettering Inventor estadounidense (1876-1958) | | Citas en tu mail | | ©Contenidos Gratis |
| Chiste de... Parejas | | Fortuna | El: -¿Me amas sólo porque mi padre me dejó una fortuna?.
Ella: -No, querido. Yo te amaría sin importar quién te la dejó. | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|