Chinaunix首页 | 论坛 | 博客
  • 博客访问: 461730
  • 博文数量: 101
  • 博客积分: 578
  • 博客等级: 中士
  • 技术积分: 872
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-12 22:24
文章分类

全部博文(101)

文章存档

2015年(1)

2014年(83)

2012年(17)

我的朋友

分类: LINUX

2012-04-22 12:01:47

最近用了php的debug工具xdebug。调试程序其实也是很重要的,这样才能检验程序的好坏。以前主要用php自带的函数。如:echo,print_r(),var_dump(),error_reporting(),display_errors等。也可以对待自己的程序了。不过一旦程序复杂就很难找。伤脑筋哦!。在一些ide工具也带debug。如zend studio 和eclipse的断点调试。我的笔记本很老了。跑不起来这两个软件。就试试xdebug吧。
第一:去xdebug官方下载xdebug。网址是:,在Windows下开发,所以选择Windows modules下对应PHP5.2.5版本的DLL。
第二:将下载的dll改名为php_xdebug.dll复制到C:\php\ext(我的php目录)。
第三:打开c:\windows\下的php.ini,在最后加上
extension=php_xdebug.dll //加载xdebug
[Xdebug]
xdebug.profiler_enable=on //打开profile
xdebug.trace_output_dir=”c:\php\xdebug” // 输出文件
xdebug.profiler_output_dir=”c:\php\xdebug” // 输出文件
第四:保存文件。重启apache。查看phpinfo();看到xdebug就ok了。
第五:使用xdebug。随便写错php程序看看是不是有报错。报错后,在c:\php\xdebug将有文件,分析下。为了更好的分析这些文件。需要下载个软件。推荐用wincachegrind工具来阅读xdebug生成的log。wincachegrind下载地址:。下载后安装,打开c:\php\xdebug这个目录将为你分析程序错误。很方便吧!就这样。

下面是在linux下的安装方法。
下载xdebug:wget /files/xdebug-2.0.0RC4.tgz
解压:tar xzf xdebug-2.0.0RC4.tgz
安装:cd xdebug-2.0.0RC4
phpize
./configure
make
make install
配置如windows一样。
接着讲些深入配置。
限制递归 xdebug.max_nesting_level = 20
写个递归函数测试下。
function getX(){
getX();
}
getX();
结果如何。
xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
xdebug.dump.REQUEST=*

xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.var_display_max_depth = 6
xdebug.dump_once、xdebug.dump_globals、xdebug.dump_undefined 和 xdebug.dump_SUPERGLOBAL 设置(其中 SUPERGLOBAL 可以是 COOKIE、FILES、GET、POST、REQUEST、SERVER 或 SESSION)用于控制哪些 PHP 超全局变量将被包含在所有诊断结果中。
将 xdebug.dump_globals 设为 On 以转储名为 xdebug.dump_SUPERGLOBAL 设置中的超全局变量。例如,xdebug.dump_SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT 将打印 PHP 超全局变量 $_SERVER['REQUEST_METHOD']、$_SERVER['REQUEST_URI'] 和 $_SERVER['HTTP_USER_AGENT']。如果需要打印超全局变量数组中的所有值,请使用星号 (*),例如 xdebug.dump_REQUEST=*。如果进一步将 xdebug.dump_undefined 设为 On 并且不设定指定的超全局变量,则仍用值 undefined 打印变量。
即使捕捉到异常,代码行 xdebug.show_exception_trace = On 仍将强制执行异常跟踪。代码行 xdebug.show_local_vars = 1 将打印每个函数调用的最外围中的所有局部变量,包括尚未初始化的变量。而 xdebug.var_display_max_depth = 6 表示转储复杂变量的深度。
传递给 trigger_error 的消息文本显示在顶部。底部是受请求的 $_SERVER 元素列表和已经定义的 $_REQUEST 元素列表。最底部是 #48 范围中的变量列表,这是根据清单对 getx() 进行的调用。在调用中,$count 是整数 48。当此 Xdebug 配置就绪后,您现在有更多的线索可以跟踪犯罪者。
跟踪代码
解决错误 —— 如解开神秘谋杀之谜 —— 通常要求构造详细的时间线。例如,内存泄漏通常不会把自身表明为一个错误计算。相反,操作将正常进行,直至内存用尽,然后应用程序突然终止。如果内存泄漏由于某些请求而恶化,可能会不断出现错误并且难以预测。在内存使用量与时间之间建立映射的时间线将揭示泄漏的严重程度。一条精细的时间线 —— 比如,从函数到函数 —— 将进一步指出泄漏源。
Xdebug 可以提供一条详细的时间线进行执行跟踪。当跟踪被启用后,Xdebug 将记录所有函数调用,包括每个函数的参数和返回值。您可以将每个日志或跟踪 的格式设为符合人类阅读习惯或者机器可读的格式。您最好使用前者,虽然您可能编写独立而特定的应用程序来分析后者。
我的配置是:
[Xdebug]
;some configure of xdebug
extension=php_xdebug.dll
xdebug.profiler_enable=on
xdebug.trace_format = 0
xdebug.auto_trace = On
xdebug.trace_output_name = trace.%c.%p
xdebug.trace_output_dir=”c:\php\xdebug”
xdebug.profiler_output_dir=”c:\php\xdebug”
xdebug.max_nesting_level = 30
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.var_display_max_depth = 6
xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
; End:
设定 xdebug.auto_trace = 1 将在执行所有 PHP 脚本之前先启用自动跟踪。另外,您可以通过代码设定 xdebug.auto_trace = 0,并分别使用 xdebug_start_trace() 和 xdebug_stop_trace() 函数启用和禁用跟踪。但是,如果 xdebug.auto_trace 为 1,则可以在包括配置好的 auto_prepend_file 之前先启动跟踪。
选项 xdebug.trace_ouput_dir 和 xdebug.trace_output_name 用于控制保存跟踪输出的位置。在这里,所有文件都被保存到 /tmp/traces 中,并且每个跟踪文件都以 trace 为开头,后接 PHP 脚本的名称(%s)以及进程 ID(%p)。所有 Xdebug 跟踪文件都以 .xt 后缀结尾。默认情况下,Xdebug 将显示时间、内存使用量、函数名和函数调用深度字段。如果将 xdebug.trace_format 设为 0,则输出将符合人类阅读习惯(将参数设为 1 则为机器可读格式)。此外,如果指定 xdebug.show_mem_delta = 1,则可以查看内存使用量是在增加还是在减少,而如果指定 xdebug.collect_params = 4,则可以查看传入参数的类型和值。要监视每个函数返回的值,请设定 xdebug.collect_return = 1。

阅读(1758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~