[TOC]
* * * * *
## 1 调试源代码(thinkphp\library\think\Debug.php)
~~~
protected static $info = [];
protected static $mem = [];
~~~
~~~
public static function remark($name, $value = '')
{
// 记录时间和内存使用
self::$info[$name] = is_float($value) ? $value : microtime(true);
if ('time' != $value) {
self::$mem['mem'][$name] = is_float($value) ? $value : memory_get_usage();
self::$mem['peak'][$name] = memory_get_peak_usage();
}
}
~~~
~~~
public static function getRangeTime($start, $end, $dec = 6)
{
if (!isset(self::$info[$end])) {
self::$info[$end] = microtime(true);
}
return number_format((self::$info[$end] - self::$info[$start]), $dec);
}
~~~
~~~
public static function getUseTime($dec = 6)
{
return number_format((microtime(true) - START_TIME), $dec);
}
~~~
~~~
public static function getThroughputRate()
{
return number_format(1 / self::getUseTime(), 2) . 'req/s';
}
~~~
~~~
public static function getRangeMem($start, $end, $dec = 2)
{
if (!isset(self::$mem['mem'][$end])) {
self::$mem['mem'][$end] = memory_get_usage();
}
$size = self::$mem['mem'][$end] - self::$mem['mem'][$start];
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getUseMem($dec = 2)
{
$size = memory_get_usage() - START_MEM;
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getMemPeak($start, $end, $dec = 2)
{
if (!isset(self::$mem['peak'][$end])) {
self::$mem['peak'][$end] = memory_get_peak_usage();
}
$size = self::$mem['peak'][$end] - self::$mem['peak'][$start];
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getFile($detail = false)
{
if ($detail) {
$files = get_included_files();
$info = [];
foreach ($files as $key => $file) {
$info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
}
return $info;
}
return count(get_included_files());
}
~~~
~~~
public static function dump($var, $echo = true, $label = null)
{
$label = (null === $label) ? '' : rtrim($label) . ':';
ob_start();
var_dump($var);
$output = ob_get_clean();
$output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
if (IS_CLI) {
$output = PHP_EOL . $label . $output . PHP_EOL;
} else {
if (!extension_loaded('xdebug')) {
$output = htmlspecialchars($output, ENT_QUOTES);
}
$output = '
' . $label . $output . '';
}
if ($echo) {
echo ($output);
return null;
} else {
return $output;
}
}
~~~
## 2 文件分析
1 静态变量
`$info:` 开始标签和结束标签之间的时间间隔信息
`$mem:`开始标签和结束标签之间的内存消耗信息
2 `public static function remark($name, $value = ''){}`
记录时间间隔和内存使用情况
3 `public static function getRangeTime($start, $end, $dec = 6){}`
统计某个区间的时间间隔
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
4 `public static function getUseTime($dec = 6){}`
统计从开始(START_TIME)到当前的时间
> $dec:小数位
5 `public static function getThroughputRate(){}`
从开始到当前时间的吞吐率情况
6 `public static function getRangeMem($start, $end, $dec = 2){}`
统计某个区间的内存使用情况
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
7 `public static function getUseMem($dec = 2)`
统计从开始到当前时间的内存使用情况
> $dec:小数位
8 `public static function getMemPeak($start, $end, $dec = 2){}`
统计某个区间的内存峰值情况
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
9 `public static function getFile($detail = false){}`
获取文件加载信息
> $detail 是否包含详细信息
10 `public static function dump($var, $echo = true, $label = null){}`
浏览器友好变量输出
> $var 输出数据信息
> $echo 返回还是输出
> $label 标签控制
## 3 使用方法
> >1 快捷操作
helper.php辅助函数中的G()封装了调试接口,分析见另:(helper.php)辅助函数
dump() 函数调用Debug::dump(),实现了浏览器友好变量输出
>>2 全局变量
base.php文件定义了系统开始时间和内存使用情况
START_TIME 开始运行时间
START_MEM 开始内存消耗
## 4 总结
Debug.php文件在开发调试中用来统计性能。
包括时间消耗,内存消耗。
还有环境友好变量输出