CakePHP - Manual/CommonTasks/Debugging /wiki/Manual/CommonTasks/Debugging History/revisions of CakePHP/Manual/CommonTasks/Debugging en-us 2009-04-26 21:52:27 /wiki/Manual/CommonTasks/Debugging/show?time=2009-04-26+21%3A52%3A27 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".manual.commontasks.debugging" href="/wiki/Manual/CommonTasks/Debugging" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Debugging</a> за <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-26+21%3A52%3A27">2009-04-26 21:52:27</a> и <a href="/wiki/Manual/CommonTasks/Debugging">2009-04-26 22:20:44</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">В&nbsp;<!--notypo-->CakePHP<!--/notypo--> 1.2 появился новый отладочный класс, который предлагает больше свойств для&nbsp;получения отладочной информации. Он&nbsp;имеет несколько функций, которые вызываются статически, и&nbsp;помогают при&nbsp;выводе данных, записи в&nbsp;журнал событий и&nbsp;обработке ошибок.<br /> Класс Debugger Class подменяет стандартную обработку ошибок PHP, заменяя ее&nbsp;более полезными отчетами об&nbsp;ошибках. Обработка ошибок из&nbsp;класса Debugger используется по&nbsp;умолчанию в&nbsp;<!--notypo-->CakePHP<!--/notypo-->. Configure::debug должно быть присвоено значение больше 0.<br /> Когда возникает ошибка, Debugger выводит информацию на&nbsp;страницу и&nbsp;делает запись в&nbsp;файл error.log. Сгенерированный отчет об&nbsp;ошибке, содержит стек трассировки и&nbsp;фрагмент кода, где&nbsp;возникла ошибка. Перейдите по&nbsp;ссылке &#147;Error&#148; для&nbsp;открытия стека трассировки, и&nbsp;по ссылке &#147;Code&#148; &ndash; для&nbsp;просмотра строк кода, где&nbsp;возникла ошибка.<br /> <span class="missingpage">&lt;&lt; Обработка ошибок</span><a href="/wiki/ErrorHandling/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Кэширование &gt;&gt;</span><a href="/wiki/Caching/edit?add=1" title="Создать эту страницу">?</a></div></div> 2009-04-23 16:27:15 /wiki/Manual/CommonTasks/Debugging/show?time=2009-04-23+16%3A27%3A15 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/CommonTasks/Debugging" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Debugging</a> за <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-23+16%3A27%3A15">2009-04-23 16:27:15</a> и <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-26+21%3A52%3A27">2009-04-26 21:52:27</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">И&nbsp;хотя этот метод используется для&nbsp;внутренних целей, он&nbsp;может быть удобен, если вы&nbsp;создаете ваши собственные сообщения об&nbsp;ошибках или&nbsp;записи в&nbsp;журнале для&nbsp;пользовательских ситуаций.<br /> <div class="indent"> <strong>exportVar($var, $recursion = 0)</strong></div> Преобразует переменную любого типа в&nbsp;строку для&nbsp;вывода при&nbsp;отладке. Этот метод также используется большинством отладчиков для&nbsp;внутреннего преобразования переменных, и&nbsp;может быть использован в&nbsp;ваших собственных отладчиках.<br /> <div class="indent"> <strong>invoke($debugger)</strong></div> Заменяет отладчик <!--notypo-->CakePHP<!--/notypo--> новым обработчиком ошибок.<a name="h870-1"></a><h3>Debugger Class</h3></div></div> 2009-04-17 13:13:52 /wiki/Manual/CommonTasks/Debugging/show?time=2009-04-17+13%3A13%3A52 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/CommonTasks/Debugging" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Debugging</a> за <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-17+13%3A13%3A52">2009-04-17 13:13:52</a> и <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-23+16%3A27%3A15">2009-04-23 16:27:15</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Выше представлен стек трассировки, сгенерированный после вызова Debugger::trace() в&nbsp;действии контроллера. Читая данный список снизу вверх, мы&nbsp;видим порядок вызова функций (стековые фреймы). В&nbsp;примере выше, index.php вызвал Dispatcher::dispatch(), который в&nbsp;свою очередь вызвал Dispatcher::_invoke(). Функция _invoke() затем вызвала PostsController::index(). Эта&nbsp;информация полезна, когда работаешь с&nbsp;рекурсивными операциями или&nbsp;глубокими стеками, т.к. идентифицирует какая функция сейчас запущена во&nbsp;время трассировки.<br /> <div class="indent"> <strong>excerpt($file, $line, $context) </strong></div> Захватывает фрагмент из&nbsp;файла $file (должен быть указан абсолютный путь), выделяет строку с&nbsp;номером $line и&nbsp;соседние для&nbsp;этой строки $context строк.<br /> pr( Debugger::excerpt(ROOT.DS.LIBS.'debugger.php', 321, 2) );<br /> <div class="indent">//выведет следующее.<br /> Array<br /> (<br /> [0] =&gt; &lt;code&gt;&lt;span style="color: #000000"&gt; * @access public&lt;/span&gt;&lt;/code&gt;<br /> [1] =&gt; &lt;code&gt;&lt;span style="color: #000000"&gt; */&lt;/span&gt;&lt;/code&gt;<br /> [2] =&gt; &lt;code&gt;&lt;span style="color: #000000"&gt; function excerpt($file, $line, $context = 2) {&lt;/span&gt;&lt;/code&gt;<br /> [3] =&gt; &lt;span class="code-highlight"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt; $data = $lines = array();&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;<br /> [4] =&gt; &lt;code&gt;&lt;span style="color: #000000"&gt; $data = @explode("\n", file_get_contents($file));&lt;/span&gt;&lt;/code&gt;</div></div></div> 2009-03-25 15:56:29 /wiki/Manual/CommonTasks/Debugging/show?time=2009-03-25+15%3A56%3A29 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/CommonTasks/Debugging" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Debugging</a> за <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-03-25+15%3A56%3A29">2009-03-25 15:56:29</a> и <a href="/wiki/Manual/CommonTasks/Debugging?time=2009-04-17+13%3A13%3A52">2009-04-17 13:13:52</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><br /> Отладка &ndash; неизбежная и&nbsp;необходимая часть любого цикла разработки. Пока что&nbsp;<!--notypo-->CakePHP<!--/notypo--> не&nbsp;предлагает ни&nbsp;одного инструмента, который напрямую соединяется с&nbsp;IDE или&nbsp;редактором. <!--notypo-->CakePHP<!--/notypo--> предоставляет несколько инструментов, помогающих при&nbsp;отладке и, показывающих что&nbsp;запущено &laquo;под капотом&raquo; вашего приложения.<br /> <br /> <hr noshade="noshade" size="1" /> <a name="h870-1"></a><h3>Основная отладка</h3> <br /> <div class="indent"> <strong>debug($var, $showHTML = false, $showFrom = true)</strong></div> <br /> Функция debug() &ndash; глобально доступная функция, которая работает подобно PHP&nbsp;функции print_r(). Функция debug() позволяет вам&nbsp;показать содержимое переменной несколькими различными способами. Если вы&nbsp;хотите, чтобы данные были показаны в&nbsp;дружественном HTML виде, установите второй параметр в&nbsp;true. По&nbsp;умолчанию функция также выведет файл и&nbsp;номер строки из&nbsp;которой делается вызов.<br /> <br /> Результат этой функции отображается только если переменная ядра debug установлена в&nbsp;значение большее нуля.<br /> <br /> <hr noshade="noshade" size="1" /> <a name="h870-2"></a><h3>Использование класса Debugger</h3> <br /> Для&nbsp;того, чтобы использовать отладчик, убедитесь, что&nbsp;Configure::read('debug') установлена в&nbsp;значение большее 0.<br /> <br /> <div class="indent"> <strong>dump($var)</strong></div> <br /> Функция dump выводит содержимое переменной. Она&nbsp;выведет все&nbsp;свойства и&nbsp;методы (если таковые имеются) для&nbsp;переданной переменной.<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br />&nbsp;&nbsp;&nbsp;&nbsp;$foo&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">2</span><span style="color: #007700">,</span><span style="color: #0000BB">3</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Debugger</span><span style="color: #007700">::</span><span style="color: #0000BB">dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//вывод<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">3<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//простой&nbsp;объект&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$car&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Debugger</span><span style="color: #007700">::</span><span style="color: #0000BB">dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$car</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//вывод<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">colour&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'red'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">make&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Toyota'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">model&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Camry'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">mileage&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'15000'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">acclerate</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">decelerate</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Car</span><span style="color: #007700">::</span><span style="color: #0000BB">stop</span><span style="color: #007700">()<br /><br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> <div class="indent"> <strong>log($var, $level = 7) </strong></div> <br /> Создает детализированный журнал событий трассировки в&nbsp;момент вызова функции. Метод log() выводит данные подобно тому, как&nbsp;это делает Debugger::dump(), но&nbsp;в debug.log вместо выходного буфера. Обратите внимание, что&nbsp;ваш каталог app/tmp (и его&nbsp;содержимое) должны быть доступны для&nbsp;записи, чтобы функция log() работала корректно.<br /> <br /> <div class="indent"> <strong>trace($options)</strong> </div> <br /> <br /> Возвращает текущий стек трассировки. Каждая строка трассировки включает вызываемый метод, из&nbsp;какого файла и&nbsp;строки сделан вызов.<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br /></span><span style="color: #FF8000">//В&nbsp;PostsController::index()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">pr</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">Debugger</span><span style="color: #007700">::</span><span style="color: #0000BB">trace</span><span style="color: #007700">()&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//вывод<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">PostsController</span><span style="color: #007700">::</span><span style="color: #0000BB">index</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">APP</span><span style="color: #007700">/</span><span style="color: #0000BB">controllers</span><span style="color: #007700">/</span><span style="color: #0000BB">downloads_controller</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">line&nbsp;48<br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher</span><span style="color: #007700">::</span><span style="color: #0000BB">_invoke</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">CORE</span><span style="color: #007700">/</span><span style="color: #0000BB">cake</span><span style="color: #007700">/</span><span style="color: #0000BB">dispatcher</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">line&nbsp;265<br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher</span><span style="color: #007700">::</span><span style="color: #0000BB">dispatch</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">CORE</span><span style="color: #007700">/</span><span style="color: #0000BB">cake</span><span style="color: #007700">/</span><span style="color: #0000BB">dispatcher</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">line&nbsp;237<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">[</span><span style="color: #0000BB">main</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">APP</span><span style="color: #007700">/</span><span style="color: #0000BB">webroot</span><span style="color: #007700">/</span><span style="color: #0000BB">index</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">line&nbsp;84<br />?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /></div></div>