Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 07.09.2006 11:25 / 07.09.2006 11:26
Очень удобно выводить отладочную информацию в процессе работы скрипа. ASharky писал класс visualization.p, но мне было неудобно использовать такое длинное название, я его немного исправил.^debug:print[$form:fields] ^debug:print[$form:tables] # или сокращенная запись: ^MAIN:p[$form:fields]Код класса:
################################################################################################### # $Id: debug.p, v 1.92 2006/01/31 22:50:14 fant-ik@yandex.ru Exp $ # BASED: # $Id: visualization.p,v 1.91 2005/10/19 15:52:40 asharky@opensea.ru Exp $ ################################################################################################### @CLASS debug @auto[] $MAIN:p[$self.print] @print[object;toFile][_strOut;_now] ################################################################################################### $_strOut[^taint[optimized-as-is][ ^if(!def $object){ ^if($object is "bool"){ ^_bool[$object] }{ ^_void[$object] } }{ ^if($object is "date"){^_date[$object]} ^if($object is "file"){^_file[$object]} ^if($object is "image"){^_image[$object]} ^if($object is "bool"){^_bool[$object]} ^if($object is "table"){^_table[$object]} ^if($object is "string"){^_string[$object]} ^if($object is "int" || $object is "double"){^_double[$object]} ^if($object is "hash"){^_hash[$object]} } ]] ^if(def $toFile){ $_now[^date::now[]] $_strOut[<br />Begin (${_now.day}.${_now.month}.${_now.year} ${_now.hour}^:${_now.minute}^:${_now.second})^:${_strOut}End<br />] ^_strOut.save[append;$toFile] }{ $result[$_strOut] } #end @debugShowObject[] @_string[text;shash] ################################################################################################### $result[^text.replace[^table::create[nameless]{^taint[^#0A] <br>}]^if(!def $shash){ (string)}] #end @_string[] @_double[d;shash] ################################################################################################### $result[$d^if(!def $shash){( (int/double))}] #end @_double[] @_bool[b;shash] ################################################################################################### $result[^if($b){TRUE}{FALSE}^if(!def $shash){ (bool)}] #end @_bool[] @_void[v;shash] ################################################################################################### $result[^if(!def $shash){Значение не присвоено (void)}] #end @_void[] @_file[f][_f] ################################################################################################### ^try{ $_f[^file::stat[$f.name]] $result[Файл <strong>^file:fullpath[$f.name]</strong><br /> Размер: <strong>$_f.size байт</strong><br /> Создан: <strong>${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин</strong><br /> Изменен: <strong>${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин</strong><br /> Последний раз обращение к файлу производилось <strong>${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.</strong><br /> MIME-тип файла: <strong>$_f.content-type</strong><br /> ^if(${_f.content-type} eq "text/plain" || ${_f.content-type} eq "text/html"){ Первые 100 символов файла:<br /> <strong><i>^f.text.left(100)...</i></strong><br /> Последние 100 символов файла:<br /> <strong><i>...^f.text.right(100)</i></strong><br /> } ] }{ $exception.handled(1) $result[<font color="red">^file:fullpath[$f.name] (file) не найден!</font>] } #end @_file[] @_date[d] ################################################################################################### $result[${d.day}.${d.month}.${d.year}, ${d.hour}:${d.minute}<small>:${d.second}</small>, $d.yearday день года] #end @_date[] @_image[i] ################################################################################################### $result[^if(def $i.src){^i.html[]}{Графический объект созданный Parser3.}<br /> Высота изображения^: ${i.height}px, ширина^: ${i.width}px<br /> ^if(def $i.exif){^_hash[$i.exif]}{EXIF информация в файле отсутствует!<br />}] #end @_image[] @_table[t][_tcol;_t;_path] ################################################################################################### ^if(!^t.columns[]){ $_path[/^math:uid64[]] ^t.save[$_path] $_t[^table::load[$_path]] ^file:delete[$_path] Объект является <strong>nameless</strong> таблицей!<br /> ^_table[$_t] }{ $_tcol[^t.columns[]] $result[<table class="debug" cellSpacing="0" cellPadding="5" border="1"> <tr align="center"> ^_tcol.menu{ <td><strong>$_tcol.column</strong></td> } </tr> ^t.menu{ <tr> ^_tcol.menu{ <td>$t.[$_tcol.column]</td> } </tr> } </table>] } #end @_table[] @_hash[h][k;v;_sdiv] ################################################################################################### ^if(!def $caller.$_sdiv){$_sdiv(0)} ^_sdiv.inc(50) ^h.foreach[k;v]{<div style="padding-left: ${_sdiv}px"> ^if($v is "int" || $v is "double"){ $ls[^(] $rs[^)] }{ $ls[^[] $rs[^]] } <strong>^$.${k}$ls</strong> ^if(!def $v){ ^if($v is "bool"){ ^_bool[$v;1]<br /> }{ ^_void[$v;1]<br /> } }{ ^if($v is "bool"){<b>^_bool[$v;1]</b>} ^if($v is "string"){^_string[$v;1]} ^if($v is "date"){^_date[$v]} ^if($v is "image"){<div style="padding-left: 50px">^_image[$v]</div>} ^if($v is "file"){<div style="padding-left: 50px">^_file[$v]</div>} ^if($v is "table"){<div style="padding-left: 50px">^_table[$v]</div>} ^if($v is "int" || $v is "double"){^_double($v;1)} ^if($v is "hash"){ ^_sdiv.inc(50) ^_hash[$v] ^_sdiv.dec(50) } } <strong>$rs</strong> </div>} #end @_hash[] @rusage[comment;toFile][v;now;prefix;message;line;usec] $v[$status:rusage] $now[^date::now[]] $usec(^v.tv_usec.double[]) $prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment] $message[$v.utime $v.stime $request:uri] $line[$prefix $message ^#0A] ^line.save[append;^if(def $toFile){$toFile}{/rusage.log}] $result[] # end @rusage[] @musage[comment][v;now;prefix;message;line] $v[$status:memory] $now[^date::now[]] $prefix[[^now.sql-string[]] $env:REMOTE_ADDR: $comment] $message[$v.used $v.free $v.ever_allocated_since_compact $v.ever_allocated_since_start $request:uri] $line[$prefix $message ^#0A] ^line.save[append;^if(def $toFile){$toFile}{/musage.log}] $result[] # end @musage[]