调试应用程序
最后更新于:2022-04-02 05:13:40
[TOC]
# 调试应用程序
![](https://docs.phalconphp.com/images/content/xdebug-1.jpg)
PHP提供了使用通知,警告,错误和异常来调试应用程序的工具。[Exception类](http://www.php.net/manual/en/language.exceptions.php)提供有关错误发生位置的信息,如文件,行,消息,数字代码,回溯等。像Phalcon这样的OOP框架主要使用此类来封装此功能,并将信息提供给开发人员或用户。
尽管用C语言编写,但Phalcon在PHP用户区中执行方法,提供了用PHP编写的任何其他应用程序或框架的调试功能。
## 捕捉异常
在整个Phalcon文档的教程和示例中,有一个共同的元素是捕获异常。这是一个`try/catch`块:
```php
getMessage(), '\n';
echo ' File=', $e->getFile(), '\n';
echo ' Line=', $e->getLine(), '\n';
echo $e->getTraceAsString();
}
```
因此,很容易找到应用程序代码的哪个文件和行生成异常,以及生成异常所涉及的组件:
```html
PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost'
(using password: NO)
File=/Applications/MAMP/htdocs/invo/public/index.php
Line=74
#0 [internal function]: PDO->__construct('mysql:host=loca...', 'root', '', Array)
#1 [internal function]: Phalcon\Db\Adapter\Pdo->connect(Array)
#2 /Applications/MAMP/htdocs/invo/public/index.php(74):
Phalcon\Db\Adapter\Pdo->__construct(Array)
#3 [internal function]: {closure}()
#4 [internal function]: call_user_func_array(Object(Closure), Array)
#5 [internal function]: Phalcon\Di->_factory(Object(Closure), Array)
#6 [internal function]: Phalcon\Di->get('db', Array)
#7 [internal function]: Phalcon\Di->getShared('db')
#8 [internal function]: Phalcon\Mvc\Model->getConnection()
#9 [internal function]: Phalcon\Mvc\Model::_getOrCreateResultset('Users', Array, true)
#10 /Applications/MAMP/htdocs/invo/app/controllers/SessionController.php(83):
Phalcon\Mvc\Model::findFirst('email='demo@pha...')
#11 [internal function]: SessionController->startAction()
#12 [internal function]: call_user_func_array(Array, Array)
#13 [internal function]: Phalcon\Mvc\Dispatcher->dispatch()
#14 /Applications/MAMP/htdocs/invo/public/index.php(114): Phalcon\Mvc\Application->handle()
#15 {main}
```
从上面的输出可以看出,Phalcon的类和方法就像任何其他组件一样显示,甚至显示每次调用中调用的参数。如果需要,方法[Exception::getTrace](http://www.php.net/manual/en/exception.gettrace.php) 提供其他信息。
## 调试组件
Phalcon提供了一个调试组件,允许开发人员轻松找到使用框架创建的应用程序中产生的错误。
以下截屏视频介绍了它的工作原理:
要启用它,请将以下内容添加到启动程序中:
```php
listen();
```
必须删除或禁用任何 `Try/Catch` 块才能使此组件正常工作。
## 反射与内省
Phalcon类的任何实例都提供与PHP普通实例完全相同的行为。可以使用[Reflection API](http://php.net/manual/en/book.reflection.php)或只是打印任何对象来显示其内部状态如何:
```php
[_module:protected] =>
[_controller:protected] =>
[_action:protected] =>
[_params:protected] => Array
(
)
[_routes:protected] => Array
(
[0] => Phalcon\Mvc\Router\Route Object
(
[_pattern:protected] => #^/([a-zA-Z0-9\_]+)[/]{0,1}$#
[_compiledPattern:protected] => #^/([a-zA-Z0-9\_]+)[/]{0,1}$#
[_paths:protected] => Array
(
[controller] => 1
)
[_methods:protected] =>
[_id:protected] => 0
[_name:protected] =>
)
[1] => Phalcon\Mvc\Router\Route Object
(
[_pattern:protected] => #^/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)(/.*)*$#
[_compiledPattern:protected] => #^/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)(/.*)*$#
[_paths:protected] => Array
(
[controller] => 1
[action] => 2
[params] => 3
)
[_methods:protected] =>
[_id:protected] => 1
[_name:protected] =>
)
)
[_matchedRoute:protected] =>
[_matches:protected] =>
[_wasMatched:protected] =>
[_defaultModule:protected] =>
[_defaultController:protected] =>
[_defaultAction:protected] =>
[_defaultParams:protected] => Array
(
)
)
```
## 使用XDebug
[XDebug](http://xdebug.org) 是一个很棒的工具,可以补充PHP应用程序的调试。它也是PHP的C扩展,您可以将它与Phalcon一起使用而无需额外的配置或副作用。
以下截屏视频显示了与Phalcon的Xdebug会话:
安装xdebug后,您可以使用其API获取有关异常和消息的更详细信息。
>[warning] 我们强烈建议使用最新版本的XDebug,以便与Phalcon更好地兼容。
以下示例实现[xdebug_print_function_stack](http://xdebug.org/docs/stack_trace)以停止执行并生成回溯:
```php
request->getPost('name', 'string');
$email = $this->request->getPost('email', 'email');
// Stop execution and show a backtrace
return xdebug_print_function_stack('stop here!');
$user = new Users();
$user->name = $name;
$user->email = $email;
// Store and check for errors
$user->save();
}
}
```
在这种情况下,Xdebug还会向我们展示本地范围内的变量,以及回溯:
```html
Xdebug: stop here! in /Applications/MAMP/htdocs/tutorial/app/controllers/SignupController.php
on line 19
Call Stack:
0.0383 654600 1. {main}() /Applications/MAMP/htdocs/tutorial/public/index.php:0
0.0392 663864 2. Phalcon\Mvc\Application->handle()
/Applications/MAMP/htdocs/tutorial/public/index.php:37
0.0418 738848 3. SignupController->registerAction()
/Applications/MAMP/htdocs/tutorial/public/index.php:0
0.0419 740144 4. xdebug_print_function_stack()
/Applications/MAMP/htdocs/tutorial/app/controllers/SignupController.php:19
```
Xdebug提供了几种使用Phalcon获取有关应用程序执行情况的调试和跟踪信息的方法。您可以查看[XDebug](http://xdebug.org/docs)文档以获取更多信息。
';