php源码调试,另:(Debug.php)开发调试

[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文件在开发调试中用来统计性能。

包括时间消耗,内存消耗。

还有环境友好变量输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值