El interactivo StepThrough depurador de PHP implementa como un módulo SAPI, la cual puede dar le dan un control completo sobre el medio ambiente sin afectar la funcionalidad o el rendimiento de su código. Su objetivo es ser un fácil ligera, potente, utilizar la plataforma de depuración de PHP 5.4+ y de su envío fuera de la caja con PHP 5.6.
Las características incluyen:
- StepThrough Depuración
- Los puntos de interrupción flexibles (método de las clases, función, del archivo: Línea, dirección, código de operación)
- Fácil acceso a PHP con una función de eval ()
- Fácil acceso a la ejecución actual Código
- API de espacio de usuario
- SAPI agnóstica - Facilidad de integración
- Soporte de archivos de configuración de PHP
- JIT Súper Globals - establecer su propio !!
- Soporte opcional readline - Funcionamiento cómodo Terminal
- Soporte depuración remota - liado GUI de Java
- Operación fácil
Ver las capturas de pantalla:


Página de inicio: http://phpdbg.com/
PHP Error - Mejor notificación de error para PHP
Esto es muy fácil de utilizar la biblioteca (en realidad un archivo) para depurar sus scripts PHP.
Lo único que tiene que hacer es incluir un archivo de la siguiente manera (en el comienzo de su código):
require('php_error.php');
\php_error\reportErrors();
A continuación, todos los errores que darán información como el trazado inverso, el contexto de código, los argumentos de funciones, variables de servidor, etc. Por ejemplo:

Las características incluyen:
- un uso trivial, es un solo archivo
- errores que aparezcan en el navegador para peticiones normales y AJAXy
- peticiones AJAX se detuvieron, lo que le permite automáticamente volver a ejecutar
- comete errores lo más estricta posible (fomenta la calidad del código, y tiende a mejorar el rendimiento)
- fragmentos de código a través de toda la traza de la pila
- proporciona más información (como firmas función completa)
- corrige algunos mensajes de error que son simplemente mal
- resaltado de sintaxis
- ¡se ve hermosa!
- personalización
- activar manualmente la activación y desactivación
- ejecutar secciones específicas sin el informe de errores
- ignorar los archivos que le permite evitar destacando código en el seguimiento de la pila
- archivos de la aplicación; éstos son priorizados cuando ocurra error!
Página de inicio: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Mi tenedor (con correcciones adicionales): https://github.com/kenorb-contrib/PHP-Error
Si el sistema es compatible Dtrace seguimiento dinámico (instalado por defecto en OS X) y su PHP está compilado con las sondas DTrace habilitados ( --enable-dtrace
) que debe ser por defecto, este comando se puede ayudar a la depuración de script PHP sin tiempo:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
Por lo tanto, dada la siguiente alias se ha añadido en sus rc archivos (por ejemplo ~/.bashrc
, ~/.bash_aliases
):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
es posible trazar la secuencia de comandos con alias fácil de recordar: trace-php
.
Aquí está la escritura dtrace más avanzada, simplemente guardarlo en dtruss-php.d
, hacerlo ejecutable ( chmod +x dtruss-php.d
) y ejecutar:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
Página de inicio: dtruss-lámpara en GitHub
Aquí está un uso sencillo:
- Ejecute:
sudo dtruss-php.d
.
- En otro terminal ejecutar:
php -r "phpinfo();"
.
Para probar esto, puede ir a cualquier docroot con index.php
y ejecutar el servidor PHP incorporado por:
php -S localhost:8080
Después de que se puede acceder al sitio en http: // localhost: 8080 / (o elegir cualquier puerto es conveniente para usted). A partir de ahí acceder a algunas páginas para ver la salida de rastreo.
Nota: Dtrace está disponible en OS X de forma predeterminada, en Linux es probable que tenga dtrace4linux o detectar algunas otras alternativas .
Véase: Uso de PHP y DTrace en php.net
Alternativamente comprobar para el rastreo de SystemTap mediante la instalación de paquete de desarrollo SystemTap SDT (por ejemplo yum install systemtap-sdt-devel
).
Aquí es ejemplo de script ( all_probes.stp
) para el rastreo de todos los puntos de la sonda estática núcleo de PHP durante toda la duración de una secuencia de comandos PHP se ejecuta con SystemTap:
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
Uso:
stap -c 'sapi/cli/php test.php' all_probes.stp
Ver: Usando SystemTap con sondas DTrace PHP estáticas en php.net