很好用的php在线调试工具
什么叫在线调试?就是在线上生产环境进行调试,假设有一天某个用户报某个页面某个数据怎么不对啊,看来线上出BUG了,于是你要迅速找出原因,首先看日志,可是悲剧的没有足够的日志让你确定线上BUG的原因,也许你这时想看某个PHP变量的值,可是你敢在线上环境加个 echo? 出问题了,你就要下岗了,如果用线下环境,可是数据环境不同,可能难以复现线上的BUG呢,这个php在线调试工具就是为解决这种问题而生,可以让你方便地查看任意线上PHP变量的值而不用改动代码,就像C的调试工具gdb那样,以下叫它ydb。
ydb采用扩展实现,在url中输入相关调试参数,即可查看相关变量值,参数包括类名,函数名,变量等。ydb不但可以让你查看任意变量值,而且可以查看函数执行耗时情况,也就是不但可以用来排除业务逻辑BUG,也可以用查看性能问题。你也许担心一个扩展放在线上是否会影响性能,它实际上对性能的影响极小,实际相关计算都是调试者本身产生,如果你觉得极小的性能影响也不能容忍,那可以在调试时再加上该扩展,重启下php进程即可。
下面来看看ydb的具体使用
假设有如下代码在index.php中是我们的调试对象
<?php
class CB {
private $pv = 'abc';
function add($a,$b){
return $a+$b;
}
}
class CA {
public function look_value($pa,$pb){
$fa = $pa;
$fb = $pb;
$fc = $fa+$fb;
$arr = array(1,2,3);
$objCb = new CB();
$fd = $objCb->add(3,4);
$arr = array(4,5,6);
return $fd;
}
function look_cost(){
$this->fun1();
$this->fun2();
$this->fun3();
usleep(300000);
}
function fun1(){
usleep(100000);
return;
}
function fun2(){
usleep(200000);
return;
}
function fun3(){
usleep(500000);
return;
}
}
$objAt = new CA();
$res = $objAt->look_value(1, 2);
$res = $objAt->look_cost();
echo "should not be here";
一.查看变量值
假设我们要查看类CA函数look_value中变量arr的值
我们需要在浏览器中输入如下url:
http://php.wenda.so.com/index.php?c=CA&f=look_value&v=arr ,
各参数意义如下
c : 表示类名
f : 表示函数名
v: 表示你想查看的变量名
键入url的结果是
从结果可以看出值是arr第二次的赋值,所以ydb的显示值都是函数执行完毕变量最后的值(什么?你想看中间值,以后会有的)。
另外,如果不输入v参数,则会打印出函数中的所有变量,输入http://php.wenda.so.com/index.php?c=CA&f=look_value的结果如下所示
可以看到函数look_value中的所有变量包括参数及对象的值都打印出来了
上面说的是get请求,如果是post请求,那该怎么办呢?同样是在url中输入参数,该 url打开提交的表单,在提交表单时,即可打印相应变量值,不过加上参数o标识这是一个post表单请求,这样就不会在当前请求中进行变量打印了。打开url:
http://php.wenda.so.com/post.html?c=CA&f=look_value&o=1,显示表单:
点提交按钮后,同样打印类函数look_value中的值,与get请求中一样,如下图所示
扩展中即通过读取post请求的refer值来实现变量值打印。
有时你不想把相关值显示在浏览器上而影响页面的正常展示,而想打印在日志文件中,这时你可以在url中添加l=1参数即可将相关变量输出打印在日志文件中,日志文件是log/ydbinfo.log,在php安装根目录中。
二.查看执行耗时
ydb可以查看某个函数中所有执行子函数的从高到低的执行耗时排行以及该函数执行的总耗时,通过一个个函数跟踪下去,就很容易找出系统的瓶颈在哪,到底哪个函数执行花费了最长时间。
查看执行耗时,也要输入 c,f参数,表示要查看哪个类的哪个函数的耗时情况,另外需要加上t=1参数,表示是查看耗时,而不是查看变量值。继续使用之前index.php中的代码,输入url :
http://php.wenda.so.com/index.php?c=CA&f=look_cost&t=1,即可看到如下结果
最上面一行表示look_cost总的耗时,接下来是look_cost中调用的三个函数耗时从大到小的耗时排行,在实际情况中,我们可以进一步将f参数改为耗时最大的那个子函数,一步步跟踪找到系统瓶颈所在。
对于post请求以及打印信息到日志中,查看耗时与查看变量值一样,相应使用o,l参数即可。
该扩展已放在github 上 https://github.com/micweaver/ydb,php5.3以上版本使用Makefile5.3编译,php5.2版本使用Makefile5.2编译,将Makefile中的php源码路径改为自己目录实际路径,编译得到ydb.so文件即可,然后在php.ini文件中加入如下配置,重启php进程就可以使用拉。
zend_extension=”ydb.so文件的路径 ”
很好用的php在线调试工具的更多相关文章
- Method Draw – 很好用的 SVG 在线编辑器
Method Draw 是一款在线 SVG 编辑器,是 SVG Edit 的一个分支.Method Draw 的目的是改进 SVG Edit 的可用性和用户体验.它移除了 line-caps/corn ...
- 分享十个JavaScript在线调试工具
测试Javascript可能是网页开发中最让人忧伤的工作.这里我找一些比较好的工具来帮助大家进行测试工作.这10款是我精选的基于浏览器的JavaScript在线调试工具,希望你们对你们有用. 1.Op ...
- web html 在线调试工具
html 的主要在线调试工具有以下几个: 1. plnkr.co 速度快,支持任意的外部css 和 js. 推荐. http://plnkr.co/edit/?p=preview 2. jsbin. ...
- 利用JVM在线调试工具排查线上问题
在生产上我们经常会碰到一些不好排查的问题,例如线程安全问题,用最简单的threaddump或者heapdump不好查到问题原因.为了排查这些问题,有时我们会临时加一些日志,比如在一些关键的函数里打印出 ...
- 015_python原生在线调试工具
一.pdb https://docs.python.org/3/library/pdb.html
- 8个很实用的在线工具来提高你的Web设计和开发能力
近期在网上看到一张帖子感觉不错.只是是英文版的今天闲着没事锻炼一下英语能力分享给大家看看! 原文地址:http://webdesignledger.com/tools/8-useful-online- ...
- golang调试工具Delve
Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试. 线上golang服务出现问题时,Devle是必不少的在线 ...
- Linux调试工具
1. 使用printf调试 #ifdef DEBUG Printf(“valriable x has value = %d\n”, x) #endif 然后在编译选项中加入-DDEBUG 更复杂的调试 ...
- Java开发常用的在线工具
原文出处: hollischuang(@Hollis_Chuang) 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中 ...
随机推荐
- C# 中委托和代理是一个概念吗??
刚刚看了一下资料,发现有些资料说的是代理,有的说是委托,但都是指同一样东西delegate,委托和事件是有关的,因为事件的本质就是多播委托,关于多播委托楼主可以找找资料就知道了. 不过个人觉得这两个概 ...
- VMware Workstation与VM ware Esxi使用OVF文件交互
实验环境: VMware Workstation 12 Pro 版本 VMware Esxi 6.0.0 版本 VMware Workstation安装一个Linux系统,把VMware Wor ...
- R语言绘制花瓣图flower plot
R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...
- Memcached系列之一
安装.运行 memcached -h 启动选项: -d 作为后台程序 -m -u -l -p -c -P (1)作为前台程序运行 memcached -vv // 显示调试信息 official do ...
- yum更换国内源 yum下载rpm包 源码包安装
7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 yum更换国内源 cd /etc/yum.repo.d/ 删除源 rm -f dvd.repo rm -f C ...
- Mac mysql 解决中文乱码
Mac mysql 解决中文乱码问题 出现"???"之类的无法识别的乱码 到/etc目录下自己建一个my.cnf文件(需要最高权限,使用sudo su),然后写入内容: [clie ...
- Lua基础语法讲解
Lua 是什么? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴西里约热内卢天主教大学( ...
- scanf_s,scanf安全版本
%s,%c必须加sizeof(it)
- IT运维队伍的管理
如何建设一支能够解决问题.创造价值.有活力的.不断进取的IT运维团队,并带领这支团队,充分发挥这个团队的优势力量,是运维业务有效开展的关键.运维 策略是直接体现运维业务的经济价值所在.好的运维措施.方 ...
- docker 相关文章
https://baijiahao.baidu.com/s?id=1581420975184566963&wfr=spider&for=pc 创建centos基础镜像 https ...