<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國際加速解決方案。 廣告
                # 調試器 Tracy調試器是PHP程序員的有用幫助提示。 它可以幫助程序員很完成以下幾點: * 快速檢測和糾正錯誤 * 日志錯誤 * 轉儲變量 * 測量腳本/查詢的執行時間 * 內存消耗 ## 安裝和要求 如何安裝Tracy的最好方法是下載最新的軟件包或使用Composer: ~~~ php composer.phar require tracy/tracy ~~~ Tracy需要PHP 5.3.0或更高版本。 **我們下載安裝包時就已自帶了tracy** ## 用法 激活Tracy很容易。 只需添加這兩行代碼,最好只是加載庫(使用require'src / tracy.php'或通過Composer): ~~~ use Tracy\Debugger; Debugger::enable(); ~~~ Tracy一開始是打開的。所以我們開發時打開網站都會看到一個調試器,所以我們不用個修改什么。 ## 調試器 調試器欄是一個浮動面板。 它一開始就顯示在頁面的右下角。 您可以使用鼠標移動它。 它會記住它在頁面重新加載后的位置。 ![](https://box.kancloud.cn/2ad33c96bab091cd2036f7c37fc68fac_560x68.png) 您可以將其他有用的面板添加到調試器欄中。 你可以在插件中找到有趣的,或者你可以創建自己的面板加入進去。 一般我們就不加了。原有的夠用了! ## 可視化的錯誤和異常 當然,你知道PHP如何報告錯誤:頁面中有這樣的源代碼: ~~~ Parse error: syntax error, unexpected '}' in HomepagePresenter.php on line 15 ~~~ 或未捕獲異常: ~~~ Fatal error: Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100 Stack trace: #0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array) #1 /sandbox/app/forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array) #2 /sandbox/app/presenters/SignPresenter.php(21): App\Forms\SignFormFactory->create() #3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\Presenters\SignPresenter->createComponentSignInForm('signInForm') #4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm') #5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php on line 100 ~~~ 這個輸出不是那么容易瀏覽理解。 如果啟用Tracy,則錯誤和異常都以完全不同的形式顯示: ![](https://box.kancloud.cn/d483183e6ec9080f9940bb68a6ba4f28_1064x787.png) 錯誤消息字面上加提示性顯示。 您可以看到源代碼的一部分,其中出現錯誤的突出顯示的行。 消息清楚地解釋了錯誤。 整個網站是互動的,你可以試試。 這前的博客實例已試過,大家不明白可以回頭看一下。 你知道嗎? 致命錯誤以相同的方式捕獲和顯示。 無需安裝任何擴展(點擊即時示例): ![](https://box.kancloud.cn/75971a36a08db73a71b33637fb0f13d7_1064x787.png) 錯誤(如變量名稱中的打字錯誤或嘗試打開不存在的文件)會生成E_NOTICE或E_WARNING級別的報告。 這些可以容易地被忽略和/或可以完全隱藏在網頁圖形布局中。 讓Tracy管理他們: ![](https://box.kancloud.cn/6c8c968d85470fb90d2a4a023312db4b_813x159.png) 或者它們可能顯示為錯誤: ~~~ Debugger::$strictMode = TRUE; ~~~ ![](https://box.kancloud.cn/12ec7460fb8f1be448ecb7279b011418_1064x787.png) ## 生產模式和錯誤日志記錄 正如你所看到的,Tracy在開發環境中是相當有說服力的。 但是在生產服務器上它會引起災難。 任何調試信息都不能在那里列出。 因此,Tracy具有環境自動檢測和日志功能。 Tracy不會顯示自己,而是將信息存儲到日志文件中,并向訪問者顯示用戶可理解的服務器錯誤消息: ![](https://box.kancloud.cn/edd6e1d1bb68848b7247044cf7303469_1064x787.png) 生產輸出模式抑制通過Debugger :: dump()或Debugger :: fireLog()發送的所有調試信息,當然還包括PHP生成的所有錯誤消息。所以,即使你在源代碼中忘記了Debugger :: dump($ obj),你也不必擔心它在你的生產服務器上顯示出來。 輸出模式由Debugger :: enable()的第一個參數設置。您可以指定常數Debugger :: PRODUCTION或Debugger :: DEVELOPMENT。其他選項是以一種方式設置它,當應用程序從定義的IP地址訪問具有定義的tracy-debug cookie值時,開發模式將打開。用于實現這一點的語法是cookie-value @ ip-address。 如果未指定,則使用缺省值Debugger :: DETECT。在這種情況下,系統通過IP地址檢測服務??器。如果通過公共IP地址訪問應用程序,則選擇生產模式。本地IP地址導致開發模式。在大多數情況下不需要設置模式。在本地服務器或生產環境中啟動應用程序時,會正確識別模式。 在生產模式下,Tracy會自動將所有錯誤和異常捕獲到文本日志中。除非另有說明,否則它將存儲在log / error.log中。此錯誤日志記錄非常有用。想象一下,你的應用程序的所有用戶實際上是betatesters。他們在狩獵蟲時自由地做最前沿的工作,如果你把他們有價值的報告丟到一個沒有注意到的回收站,你會很蠢。 如果您需要記錄自己的消息或捕獲異常,請使用方法log(): ~~~ Debugger::log('Unexpected error'); // 短信息 try { criticalOperation(); } catch (Exception $e) { Debugger::log($e); //日志異常 // 或者 Debugger::log($e, Debugger::ERROR) // 還會發送電子郵件通知 } ~~~ 可以通過enable()方法的第二個參數設置錯誤日志記錄的目錄: ~~~ Debugger::enable(Debugger::DETECT, __DIR__ . '/mylog'); ~~~ 如果希望Tracy使用詳細信息(HTML報告)記錄類似E_NOTICE或E_WARNING的PHP錯誤,請設置Debugger :: $ logSeverity: ~~~ Debugger::$logSeverity = E_NOTICE | E_WARNING; ~~~ 對于一個真正的專業人士,錯誤日志是一個重要的信息來源,他或她想立即被通知任何新的錯誤。 Tracy幫助他。 她能夠為每個新的錯誤記錄發送電子郵件。 變量$ email標識發送這些電子郵件的位置: ~~~ Debugger::$email = 'admin@example.com'; ~~~ 為了防止您的電子郵件箱泛洪,Tracy只發送一條消息,并創建一個電子郵件發送的文件。 當開發人員收到電子郵件通知時,他檢查日志,更正他的應用程序并刪除電子郵件發送的監控文件。 這將再次激活電子郵件發送。 ## 變量傾銷 每個調試開發人員都是一個很好的朋友,函數var_dump詳細列出了任何變量的所有內容。 不幸的是,它的輸出沒有HTML格式化,并將轉儲輸出到一行HTML代碼,更不用說上下文轉義。 有必要用一個更方便的函數來替換var_dump。 這就是Debugger :: dump()是什么。 ~~~ $arr = [10, 20.2, TRUE, NULL, 'hello']; dump($arr); // 或者Tracy\Debugger::dump($arr); ~~~ 很明顯這個是我們常用的測試變量。 生成輸出: ![](https://box.kancloud.cn/9aad97da5f7b660ec069e51ba94cddd8_216x173.png) 您還可以通過Debugger :: $ maxDepth更改嵌套深度,并通過Debugger :: $ maxLen更改顯示的字符串長度。 自然地,較低的值加速Tracy渲染。 ~~~ Debugger::$maxDepth = 2; // default: 3 Debugger::$maxLen = 50; // default: 150 ~~~ dump()函數可以顯示其他有用的信息。 Tracy \ Dumper :: LOCATION_SOURCE添加了工具提示和文件的路徑,函數被調用。 Tracy \ Dumper :: LOCATION_LINK添加了該文件的鏈接。 Tracy \ Dumper :: LOCATION_CLASS向包含文件路徑的每個轉儲對象添加一個工具提示,其中定義了對象的類。 所有這些常量可以在調用dump()之前在Debugger :: $ showLocation變量中設置。 您可以使用|一次設置多個值 運算符。 ~~~ Debugger::$showLocation = Tracy\Dumper::LOCATION_SOURCE; // Shows path to where the dump() was called Debugger::$showLocation = Tracy\Dumper::LOCATION_CLASS | Tracy\Dumper::LOCATION_LINK; // Shows both paths to the classes and link to where the dump() was called Debugger::$showLocation = FALSE; // Hides additional location information Debugger::$showLocation = TRUE; // Shows all additional location information ~~~ 非常方便的替代Debugger :: dump()是Debugger :: barDump()。 這允許我們在Debugger Bar中轉儲變量。 這是有用的,因為轉儲不會弄亂輸出,我們還可以為轉儲添加標題。 ~~~ Debugger::barDump([2, 4, 6, 8], 'even numbers up to ten'); Debugger::barDump([1, 3, 5, 7, 9], 'odd numbers up to ten'); ~~~ ![](https://box.kancloud.cn/33fde68af41790aa8a9cc5ebbb64c28c_397x381.png) 定時 另一個有用的工具是調試器秒表,精度為微秒: ~~~ Debugger::timer(); // sweet dreams my cherrie sleep(2); $elapsed = Debugger::timer(); // $elapsed = 2 ~~~ 一次可以通過可選參數實現多個測量。 ~~~ Debugger::timer('page-generating'); // some code Debugger::timer('rss-generating'); // some code $rssElapsed = Debugger::timer('rss-generating'); $pageElapsed = Debugger::timer('page-generating'); ~~~ ~~~ Debugger::timer(); // runs the timer ... // some time consuming operation echo Debugger::timer(); // elapsed time in seconds ~~~ 其實這章主要學會看Tracy還有日記,還有dump就可以了。其他的不用去設置,因為安裝包什么都幫我們設置好了。只是讓大家了解更細的的功能。不過也很少用的得到。
                  <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>

                              哎呀哎呀视频在线观看