PHP ofrece herramientas para depurar aplicaciones con avisos, advertencias, errores y excepciones. The Exception class offers information such as the file, line, message, numeric code, backtrace etc. of where an error occurred. Los frameworks orientados a objetos como Phalcon principalmente utilizan esta clase para encapsular esta funcionalidad y proporcionar información al desarrollador o el usuario.
A pesar de estar escrito en C, Phalcon ejecuta métodos en el espacio de usuario de PHP, proporcionando las mismas capacidades de depuración que otros frameworks basados en PHP ofrecen.
Excepciones
Una forma muy común de controlar el flujo de errores en tu aplicación (intencional o de otro tipo) es utilizar un bloque try/catch para atrapar excepciones. Hay muchos ejemplos en nuestra documentación que demuestran estos bloques.
<?phptry{// ... }catch(\Exception$ex){}
Cualquier excepción lanzada dentro del bloque es capturada en la variable $ex. A Phalcon\Support\Debug\Exception extends the PHP Exception class. El uso de la excepción de Phalcon le permite distinguir si la excepción fue lanzada desde el código relacionado con Phalcon o en otros lugares.
Por lo tanto es fácil de encontrar que archivo y línea de código de la aplicación generaron la excepción, así como los componentes implicados en la generación de la misma:
Como se ha demostrado anteriormente, no importa que Phalcon esté compilado como una extensión de PHP. La información de excepción contiene parámetros y llamadas a métodos que participaron en la llamada que generó el fragmento de excepción anterior. Exception::getTrace() provides additional information if necessary.
Constructor
Phalcon\Support\Debug provides visual aids as well as additional information for developers to easily locate errors produced in an application.
NOTE Please make sure that this component is not used in production environments, as it can reveal information about your server to attackers
El siguiente video tutorial explica cómo funciona:
Para habilitarlo, añada lo siguiente a su archivo de arranque:
NOTE: Any try/catch blocks must be removed or disabled to make this component work properly.
By default, the component will listen for uncaught exceptions but not low severity errors (warnings, notices etc.). Puede modificar este comportamiento pasando parámetros relevantes en listen()
exceptions - bool
lowSeverity - bool
In the example below, do not listen to uncaught exceptions but listen to non-silent notices or warnings (low severity):
NOTE: The listenExceptions() and listenLowSeverity() are ON switches. If you wish to switch listening to exceptions or low severity errors OFF you need to pass false in the listen() method.
Getters
Hay algunos getters disponibles que ofrecen información sobre el componente. Extender de estos también podría cambiar visualmente el comportamiento del componente.
Método
Devuelve
Descripción
getCssSources()
string
Returns the stylesheets used to display the contents on screen
getJsSources()
string
Returns the javascript files used to display the contents on screen
getVersion()
string
Returns the link to the current version documentation
Extender del componente y sobrescribir el método getCssSources(), por ejemplo, para devolver diferentes directivas HTML CSS cambiará la apariencia de la salida en pantalla. The output CSS classes are based on Bootstrap CSS.
Setters
Phalcon\Support\Debug also offers some setters to better customize the output when an error occurs in your application.
Método
Descripción
setShowBackTrace(bool $showBackTrace)
Show/hide the exception’s backtrace
setShowFileFragment(bool $showFileFragment)
Show/Hide the file fragment in the output (related to the exception)
setShowFiles(bool $showFiles)
Show/Hide the files in the backtrace
setUri(string $uri)
The base URI for static resources (see also the Getters section for customization of the component)
Variables
También puede utilizar el método debugVar(), para inyectar cualquier variable adicional que desee presentar en la salida. Estas son generalmente variables específicas de aplicación. Un ejemplo podría ser mostrar información de tiempo para su aplicación.
As mentioned above, the component must not be enabled in production environments. Dado que Phalcon no puede controlar este comportamiento, hay una función integrada de lista negra que permite al desarrollador hacer una lista negra de ciertas piezas de información que no se desean que se muestren en la pantalla, por si acaso. Estos son elementos de los arreglos $_REQUEST y $_SERVER.
En el ejemplo anterior, nunca mostraremos el elemento some del $_REQUEST así como el hostname de $_SERVER. You can always add more elements not to be displayed, that exist in these two super-globals. Esto es especialmente útil en caso de que olvide desactivar el componente en su entorno de producción. Es una mala práctica dejarlo habilitado, pero si lo olvida, al menos ciertas piezas clave de información sobre su host no serán visibles para los potenciales atacantes.
NOTE: The keys of the array elements to be hidden are case-insensitive
Gestores
In order to catch exceptions and low severity errors, Phalcon\Support\Debug makes use of onUncaughtException() and onUncaughtLowSeverity(). La mayoría de los desarrolladores que usan este componente nunca necesitarán extender estos métodos. Sin embargo, si lo desea puede hacerlo extendiendo el componente y sobreescribiendo estos métodos para manipular la excepción y devolver la salida que usted requiera.
These two methods are being set as exception handlers using PHP’s set_exception_handler. Al llamar a listenExceptions() es registrado onUncaughtException(), mientras que al llamar a listenLowSeverity() es registrado onUncaughtLowSeverity.
Reflexión e introspección
Phalcon classes do not differ from any other PHP classes, and therefore you can use the Reflection API or simply print any object to display its contents and state:
Xdebug is an amazing tool that complements the debugging of PHP applications. También es una extensión de C para PHP, y se puede utilizar junto con Phalcon sin configuración adicional o efectos secundarios.
Una vez que Xdebug esta instalado, puede utilizar su API para obtener una información más detallada sobre las excepciones y los mensajes.
NOTE: We highly recommend using the latest version of Xdebug for a better compatibility with Phalcon
The following example implements xdebug_print_function_stack to stop the execution and generate a backtrace:
<?phpusePhalcon\Mvc\Controller;classSignupControllerextendsController{publicfunctionindexAction(){}publicfunctionregisterAction(){$name=$this->request->getPost('name','string');$email=$this->request->getPost('email','email');// Stop execution and show a backtracereturnxdebug_print_function_stack('stop here!');$user=newUsers();$user->name=$name;$user->email=$email;// Store and check for errors$user->save();}}
Para el ejemplo anterior, Xdebug también nos mostrará las variables en el ámbito local, así como un backtrace:
Xdebug: stop here! in /app/app/controllers/SignupController.php
on line 19
Call Stack:
0.0383 654600 1. {main}() /app//public/index.php:0
0.0392 663864 2. Phalcon\Mvc\Application->handle()
/app/public/index.php:37
0.0418 738848 3. SignupController->registerAction()
/app/public/index.php:0
0.0419 740144 4. xdebug_print_function_stack()
/app/app/controllers/SignupController.php:19
Xdebug proporciona varias formas de obtener información de depuración y rastreo con respecto a la ejecución de su aplicación utilizando Phalcon. You can check the XDebug documentation for more information.
To set up Xdebug for PHPStorm you can check this article.