+ -
当前位置:首页 → 问答吧 → php程序调试追踪工具[PHPLog]

php程序调试追踪工具[PHPLog]

时间:2009-08-26

来源:互联网

本帖最后由 altsee 于 2009-9-18 17:45 编辑

引子:

     本文将为你介绍一个调试工具,它可以替代echo,print_r,var_dump等系统函数,还具有调用栈及参数追踪功能. 简言之,它是debug_backtrace的web版本.
     (请参看php手册的debug_backtrace)

原理:

    1.程序执行的过程中,在相应的地方记录你想要追踪的变量及调用栈和每次函数调用的参数,
          把这些信息以一定的格式记录到文件,一个变量一行,具体数据格式请参看代码,这里不细讲.

    2.现在有了每次记录变量时的所有信息(包括调用栈及参数),当你通过浏览器访问这个程序时, 这个程序会把整个文件读取分析,
          在页面显示你的所有调试信息,并且它会动态ajax刷新,保持与你的调试同步.

    画个图吧,要清晰得多.

下载 (33.77 KB)
2009-8-26 09:46


     BackTrace也就是调用栈信息,没有在图中体现,是ajax动态刷新的.


功用:

      再截几个本机的图说明下:

     1.包含文件,调试变量(上面是程序,下面是apache_request_headers()的调试输出)

下载 (64.64 KB)
2009-8-26 09:46



     2.drupal系统某次函数的调用栈列表

   
下载 (47.36 KB)
2009-8-26 09:46


     3.栈中某个函数的调用参数

下载 (38.96 KB)
2009-8-26 09:46


后记:


   程序基本上实现了调试,追踪php变量的功能,还附带了调用栈及调用参数查看功能.
   
   特别是像drupal这类复杂的系统,能够清楚地知道程序是怎么执行的.


说明:

    程序是用php4的写法写成的,在php4.4.8, 5.2.5上测试过, 理论上是支持php4, php5的.

    程序有点大,逻辑也较复杂,代码就不帖出来讨论.


SF在线演试(关闭了删除功能):
    http://phplog.sourceforge.net/phplog.php

下面的链接可以下载最新版本, 附件里的是1.3版.
            
   http://sourceforge.net/projects/phplog/files/latest
     
附v1.3: phplog_v1.3.zip (60.59 KB)
下载次数: 10
2009-9-14 14:45



Email: [email protected]

作者: altsee   发布时间: 2009-08-26

学习一下,orz

作者: 一贯而终   发布时间: 2009-08-26

刚看到,顶了

作者: z0800   发布时间: 2009-09-08

本帖最后由 altsee 于 2009-9-14 14:46 编辑

最新版1.2版本已发布.
    v1.1:
        1.实现使用数据库记录log
        2.修正popup window bug
   
    v1.2:
        1.实现二进制文件存取log
        2.实现ajax后台,数据分块传输
        3.实现自动配置,对于大多使用者来说,现在该程序已不需要进行配置了
        4.实现代码块性能追踪,即__timer所实现的功能


由于所有代码都放到一个文件里了,有点长,并且不是很清晰,可能不是很好懂,所以写了个

project.pl把本地的开发版都抽取到压缩包里了.(本地文件结构较有组织些,好懂!)

作者: altsee   发布时间: 2009-09-11

本帖最后由 altsee 于 2009-9-14 14:47 编辑

尽管简单,还是再写个使用说明吧.

一:__log的使用

1.在你的程序里先包含phplog.php
2.使用__log(),记录你要调试的变量
  例如:

require_once('phplog.php');
__log($_SERVER);


3.在浏览器里访问phplog.php,你可以看到完整的信息

二:__timer的使用

1.在要进行性能追踪的代码块的开始部分,调用__log_start()
2.代码块结束的部分,调用__log_stop()
  例如:

require_once('phplog.php');
__log_start();
for($i = 0; $i < 10000; $i++){
  // do something!
}
__log_stop();


3.回到浏览器,你可以看到这个代码块的执行时间,所用的内存,以及当前已分配的总内存.


另外,__log, __timer等函数,都可以通过修改程序中以__phplog_alias_开头的函数,来建立别名.
比如,找到__phplog_alias_of_log, 替换成system_log,你就可以在任何地方使用system_log来代替__log.(个人比较习惯使用下划线.)

作者: altsee   发布时间: 2009-09-11

不错,感谢分享!

PS:楼主用的是Vista,不过没开玻璃效果

作者: peacock   发布时间: 2009-09-12

本帖最后由 altsee 于 2009-9-18 18:26 编辑

好眼力,的确是vista.
v1.3:
        --实现在线更新提示
        --重构部分代码,性能优化
        --提供API
        --调整前后台模板引擎

SF在线演试:http://phplog.sourceforge.net/phplog.php

作者: altsee   发布时间: 2009-09-18