<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 調試應用程序(Debugging Applications) ![../_images/xdebug-1.jpg](http://docs.iphalcon.cn/_images/xdebug-1.jpg) Phalcon中提供了提供了幾種調試級別即通知,錯誤和異常。 異常類[Exception class](http://www.php.net/manual/en/language.exceptions.php)提供了錯誤發生時的一些常用的調試信息如文件,行,消息,錯誤代碼,跟蹤信息等。 Phalcon主要使用這個異常類來包裝這些功能,以方便開發者或用戶使用。 盡管Phalcon是使用C語言書寫的,但其依然如其它的PHP框架般提供了一些必須的調試工具,PHP本身提供的調試工具亦然可以正常使用。 ## 捕獲異常(Catching Exceptions) 縱觀Phalcon的文檔及其提供的例子程序, 有一個最直接的捕獲異常的方法即是使用try/catch塊: ~~~ <?php try { // ... Some Phalcon/PHP code } catch (\Exception $e) { } ~~~ try/catch塊內發生的異常會被捕獲然后放入`$e`變量。 開發者可以使用[Phalcon\\Exception](http://docs.iphalcon.cn/api/Phalcon_Exception.html)(擴展自[Exception class](http://www.php.net/manual/en/language.exceptions.php))來確定異常信息是來自Phalcon還是PHP本身。 PHP產生的所有異常都是基于[Exception class](http://www.php.net/manual/en/language.exceptions.php), 且至少含有如下元素: ~~~ <?php class Exception { /* Properties */ protected string $message; protected int $code; protected string $file; protected int $line; /* Methods */ public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]]) final public string getMessage ( void ) final public Exception getPrevious ( void ) final public mixed getCode ( void ) final public string getFile ( void ) final public int getLine ( void ) final public array getTrace ( void ) final public string getTraceAsString ( void ) public string __toString ( void ) final private void __clone ( void ) } ~~~ 如從[Exception class](http://www.php.net/manual/en/language.exceptions.php)中取得異常信息一樣, 我也可以從[Phalcon\\Exception](http://docs.iphalcon.cn/api/Phalcon_Exception.html)中取異常信息。 ~~~ <?php try { // ... App code ... } catch (\Exception $e) { echo get_class($e), ": ", $e->getMessage(), "\n"; echo " File=", $e->getFile(), "\n"; echo " Line=", $e->getLine(), "\n"; echo $e->getTraceAsString(); } ~~~ 因此, 開發者可以非常容易找出在哪個文件中哪一行產生的異常信息,也可以看到異常信息涉及到的模塊: ~~~ 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)獲取更多的信息。 ## 調試組件(Debug component) Phalcon提供的調試組件可以使開發者更容易的定位代碼中的錯誤。 下面的視頻中展示了如何工作的: 要打開調試功能只需要如下做: ~~~ <?php $debug = new \Phalcon\Debug(); $debug->listen(); ~~~ 注意一定要去掉Try/Catch塊才可以, 否則異常信息不會正確的輸出(事實上很多時候Phalco顯示異常信息是非常耗時的)。 ## 反射與內省(Reflection and Introspection) Phalcon的類的實例通常比一般的類實例更復雜。 這里我們可以使用 ‘Reflection API’\_ (反射機制) 或 直接打印其內部狀態來觀其究竟: ~~~ <?php $router = new Phalcon\Mvc\Router(); print_r($router); ~~~ 開發者可以非常容易的觀察到對象內部的狀態。 上面的代碼輸出如下: ~~~ Phalcon\Mvc\Router Object ( [_dependencyInjector:protected] => [_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(Using XDebug) [XDebug](http://xdebug.org/)是一個非常好(神奇)的調試工具,其和PHP內部調試工具一起為我們提調試工具(可以和PHP內置的調試工具互補)。[XDebug](http://xdebug.org/)也是一個PHP擴展, 所以二者可以一起使用,而且不需要額外的配置。 下面的視頻中展示了Phalcon中使用XDebug的情況: 一旦安裝了xdebug, 開發者便可以使用其API來取得更多的異常信息和其它信息: > 我們強烈推薦至少使用XDebug 2.2.3 以提供與Phalcon最佳的兼容性。 下面的例子中調用了[xdebug\_print\_function\_stack](http://xdebug.org/docs/stack_trace)方法, 并返回了該方法產生的代碼跟蹤結果: ~~~ <?php use Phalcon\Mvc\Controller; class SignupController extends Controller { public function indexAction() { } public function registerAction() { // Request variables from HTML form $name = $this->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顯示出了局部變量和代碼的跟蹤信息: ~~~ 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 documentation](http://xdebug.org/docs)( XDebug 文檔)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看