Skip to content
This repository has been archived by the owner on Dec 11, 2018. It is now read-only.

Solar Debug

lifephp edited this page Jul 18, 2012 · 4 revisions

SolarDebug

思路源于Disucuz debug. 让你用Solar更方便, 助你的项目的开发, 优化一臂之力!

ps. 开发了这个我才知道Solar要include的文件那么多, hello word要31个.

推荐: php调试可以用debug_backtrace()函数, 很好用!

功能

  • 页面总执行时间, 内存消耗.
  • Sql列表, Explain Sql, Sql执行时间, 供分析Sql查询, 每次查询都有php backtrace, 更好定位代码.
  • Ajax Sql, 每次Ajax Sql都会记录.
  • file 列表, 查看Solar 包含的文件.
  • Cookie查看.

改动的文件

改动index.php 开启debug DEBUG常量在index.php中定义, 并在index.php最后执行Solar_Debug

// index.php开头
define('DEBUG', true);

//....

// 最后 执行Solar_Debug, 要在Done之前
if(defined("DEBUG") && DEBUG) {
	$debug = Solar::factory('Solar_Debug');
	echo $debug->debug();
}

// Done!
Solar::stop();

改动: Solar.php 记录开始运行时间

  • 添加$start_time静态变量, 记录程序始执行的时间.
  • 改动start(), 添加判断debug是否开启, 开启则设置$start_time.
	// Solar类开始, 添加
	public static $start_time;
	
	//...
	
	// start()方法在最开始时添加:
    public static function start($config = null)
    {
        // don't re-start if we're already running.
        if (Solar::$_status) {
            return;
        }

		// 记录程序执行开始时间
		// life Debug 2012/7/8 22:47
		if(defined('DEBUG') && DEBUG) {
			Solar::$start_time = microtime(true);
		}
		
		//........
	}

改动: Solar_Sql_Adapter 记录sql

  • 添加sql_debug静态变量.
  • query()方法改动, 记录查询的SQL语句, 时间, 文件trace.
	// 类开头, 添加sql_debug静态变量
	public static $sql_debug;
	
	//.......
	// query()方法中 末尾
    public function query($stmt, $data = array())
    {
		//.........

		// life Debug
		if(defined('DEBUG') && DEBUG) {
			self::$sql_debug[] = array('sql' => $stmt, 'time' => number_format((microtime(true) - $time), 6), 'backtrace' => debug_backtrace());
		}
		
		// done!
		return $prep;
	}

外部查看debug /debug 目录下的文件

  • debug.php 外部入口文件, 包含debug_header.php, debug_data.php.
  • debug.header.php debug导航.
  • debug_data.php Solar_Debug.php生成的数据文件, 里面含有全部的sql, ajax sql, file数据.
  • debug_data_log.php 非ajax访问的数据.
  • debug_data_ajax_log.php ajax访问的数据. 每次ajax访问都会将数据追加到该文件中, 并和debug_data_log.php的数据结合覆盖到debug_data.php中.
  • debug.css, debug.js 不用解释.

如何使用?

index.php, Solar.php, Solar_Sql_Adapter.php改动之后, 把/debug目录放在根目录下, 最简单的方法就是在browser上输入Http://your-project-url/debug/debug.php.

第二个方法是在页面的底部显示debug信息. 在你的layout中_footer.php(反正是在页面的最后面, 放在哪个文件上看你)加上:

<iframe src="http://your-project-url/debug/debug.php" height="1300px" width="100%" frameborder="0" id="debug_iframe"></iframe>

注: iframe的id="debug_iframe"不能乱改, 改了这这个值你还得到在debug.js中改.

Clone this wiki locally