前言
在程序的开发阶段,必须涉及到程序的调试,调试可以减少代码中隐藏的隐患。
PHP代码调试
对于简单的php代码,使用常用的输出函数即可完成调试。常用的函数有echo、print、print_r、die、var_dump等,echo和var_dump最常用。
自定义debug函数
function debug(){
$numargs=func_num_args();//实参个数
$arg_list=func_get_args();//获取对应的参数
for($i=0;$i<$numargs;$i++){
echo "第{$i}个变量的值为:",$arg_list[$i],PHP_EOL;
}
echo "当前的文件名称为:",__FILE__,PHP_EOL;
}
var_dump函数
有的情况,需要知道变量的类型,如果变量是一个矢量类型的数据(数组对象等),可以使用var_dump函数。
==注意:除了以上常见的函数和语法外,还有debug_zval_dump函数。这个函数输出结果和var_dump类似,唯一不同的就是增加了一个refcount,记录变量的调用次数。==
function console_log( $data ){
echo '<script>';
echo 'console.log('. json_encode( $data ) .')';
echo '</script>';
}
通过xdebug进行调试
- xdebug的下载
xdebug版本检测,有浏览器打开 https://xdebug.org/download.php地址,显示如下页面:
单机 installation instructions,将phpinfo信息拷贝到文本框中,检测所需要的xdebug版本,结果如下:
根据检测结果进行xdebug配置;
[xdebug]
zend_extension = D:\wnmp\php\php-5.6\ext\php_xdebug-2.4.0-5.6-vc11-nts.dll
- xdebug主要设置
自动打开“监测函数调用过程”的功模。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为off
xdebug.auto_trace=onxdebug.collect_params=on打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为off
xdebug.collect_params=on打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为off
xdebug.collect_return=on设定函数调用监测信息的输出文件的路径
xdebug.trace_output_dir=D:\wnmp\tmp\xdebug打开效能监测器
xdebug.profiler_enable=on文件名称
xdebug.profiler_output_name =cachegrind.out.%t.%p设定效能监测信息输出文件的路径
xdebug.profiler_output_dir=D:\wnmp\tmp\xdebug允许调试的客户端IP
xdebug.remote_host=127.0.0.1远程调试的端口(默认9000)
xdebug.remote_port=9000调试插件dbgp
xdebug.remote_handler=dbgp
- phpstorm 与xdebug配置
xdebug.idekey=”PHPSTORM”
首先配置PHP解释器的路径 File->settings>PHP
搜索框中输入PHP,出现如下界面:
填写服务器端的相关信息 File>Settings>PHP>Servers
配置xdeub选项File>Settings>PHP>Debug
- PHPSTORM断点调试,打开监视器
打开之后如下:
- phpstorm设置断点,并调试,如下图:
- xdebug分析器
xdebug生成的结果是cacheGrind格式,所以要使用兼容CacheGrind应用来查看xdebug结果,常用的软件如下:
在Windows中常用WincacheGrind;
在Linux中运行KcacheGrind
在Web浏览器中使用WebGrind
- WebGrind使用
单机WebGrind下载,放到对应的web根目录下,通过webgrind文件夹下的config.php可以做相关配置:
static $profilerDir = 'D:\wnmp\tmp\xdebug';
配置完成后显示以下页面:
- WebGrind常用参数分析:invocation count 表示的是整个php页面从载入到执行完毕呈现,各种函数被调用的总次数
total self cost 表示的是函数自身消耗
total inclusive cost 表示的是此函数从开始到执行完毕所用消耗 ,包括自身消耗和调用其他函数消耗
点击一个父函数名后出现展开:
Calls - 此函数中调用并执行的所有函数/方法名 次数 及耗时
Total Call Cost - 被此父函数调用时,执行的总耗时
Count - 被此父函数调用时,执行的次数