前言:
Xdebug最常用的就是错误提示,它可以将一些脚本错误的详细信息给展示出来,甚至到错误的变量。对于程序最优它也有着必然的作用,配合Kcachegrind对Xdebug生成的日志文件进行性能分析,WINDOWS下常用Wincachegrind。
在这里再提示一下
PHP 5.2.X的版本用zend_extension_ts加载 PHP 5.3.X的版本要用 zend_extension加载
首先下载php相对应的版本Xdebug,可以在页面输出
<?php phpinfo(); ?>
将打印出来的所有字符串复制到http://www.xdebug.org/wizard.php进行自动检测,会根据当前PHP版本进行提示下载。
将下载后的DLL组件放在PHP目录的/ext目录,例如d:/webserver/php5.3/ext。
最终配置:
;zend_extension_ts="D:/web_server/xdebug/php_xdebug-2.2.1-5.3-vc9-nts.dll" zend_extension="D:/web_server/xdebug/php_xdebug-2.2.1-5.3-vc9.dll" xdebug.auto_trace=on xdebug.collect_return=on xdebug.trace_output_dir="D:/web_server/xdebug/tracelog" xdebug.profiler_enable=on xdebug.profiler_output_dir="D:/web_server/xdebug/profilerlog" xdebug.default_enable = On xdebug.show_exception_trace = On xdebug.show_local_vars = 1 xdebug.max_nesting_level = 50 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.trace_format = 0 xdebug.auto_trace = On xdebug.trace_output_name = trace.%c.%p xdebug.collect_params = 4 xdebug.collect_includes = On xdebug.show_mem_delta = On
;参数解释: ;zend_extension_ts="d:/webserver/php5/ext/php_xdebug.dll" ;加载xdebug模块。这里不能用extension=php_xdebug.dll的方式加载,必须要以zend的方式加载,否则安装上后,phpinfo是显示不出xdebug这个项的。 ;xdebug.auto_trace=on; ;自动打开“监测函数调用过程”的功模。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为off。 ;xdebug.collect_params=on; ;打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为off。 ;xdebug.collect_return=on ;打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为off。 ;xdebug.trace_output_dir=”c:\Temp\xdebug” ;设定函数调用监测信息的输出文件的路径。 ;xdebug.profiler_enable=on ;打开效能监测器。 ;xdebug.profiler_output_dir="D:/web_server/xdebug/profilerlog" ;设定效能监测信息输出文件的路径。 /* 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 表示转储复杂变量的深度。 跟踪代码 解决错误 —— 如解开神秘谋杀之谜 —— 通常要求构造详细的时间线。例如,内存泄漏通常不会把自身表明为一个错误计算。相反,操作将正常进行,直至内存用尽,然后应用程序突然终止。如果内存泄漏由于某些请求而恶化,可能会不断出现错误并且难以预测。在内存使用量与时间之间建立映射的时间线将揭示泄漏的严重程度。一条精细的时间线 —— 比如,从函数到函数 —— 将进一步指出泄漏源。 Xdebug 可以提供一条详细的时间线进行执行跟踪。当跟踪被启用后,Xdebug 将记录所有函数调用,包括每个函数的参数和返回值。您可以将每个日志或跟踪 的格式设为符合人类阅读习惯或者机器可读的格式。您最好使用前者,虽然您可能编写独立而特定的应用程序来分析后者。 同转储一样,Xdebug 有若干个 php.ini 选项用于自定义跟踪内容。例如,下面一批设置将生成最详细的输出。 xdebug.trace_format = 0 xdebug.auto_trace = On xdebug.trace_output_dir="D:/web_server/xdebug/tracelog" xdebug.trace_output_name = trace.%c.%p xdebug.collect_params = 4 xdebug.collect_includes = On xdebug.collect_return = On xdebug.show_mem_delta = On 设定 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。 */