| Новости | 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[]