有哪些 PHP 调试技巧?
xdebug_start_trace();
/* 业务代码 */
xdebug_stop_trace();
他解决了我长久以来一个代码调试问题:比如有以下几个场景:
1、一个有几百行的函数,里面有很多return,现在函数异常返回了,但是我不知道是从哪一行返回的,这时候呢,我一般的做法都是每一行echo();die();太费事了。
2、接触一个新的框架,代码执行出现异常,怎么办呢,肯定也是一行一行的echo();die();
3、想学习一个新框架,想知道代码的执行轨迹:执行了哪些类、调用了哪些类的方法,等等。
现在呢,xdebug的代码跟踪,能帮我们轻松解决上面的问题。https://www.yuedecaifu.com
xdebug的安装(网上我看到了很多的都是在说xdebug、phpstorm、chrome咋配合起来远程调试,搞得大家好像觉得xdebug用起来那么费事,那么高级,其实没必要):
1、安装php xdebug扩展(不再细说)
2、配置:这里只讲代码跟踪相关的配置:
cat /etc/php.d/xdebug.ini
extension=/usr/lib64/php/modules/xdebug.so
;代码跟踪日志文件位置,注意要先新建这个traces目录,并设置777
xdebug.trace_output_dir = /tmp/traces
;代码跟踪日志文件格式
xdebug.trace_output_name = trace.%c.%p
;trace中显示函数的参数值,这个很有用,待会细说
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
安装好之后,代码执行明细(trace),就存放在/tmp/traces目录下了:
<img src="https://pic4.zhimg.com/d2006b7fc37cc5a97e300655c797e90b_b.png" data-rawwidth="605" data-rawheight="221" class="origin_image zh-lightbox-thumb" width="605" data-original="https://pic4.zhimg.com/d2006b7fc37cc5a97e300655c797e90b_r.png">我截取一段trace日志,大家看下,就能感知到这个用法的方便了:
我截取一段trace日志,大家看下,就能感知到这个用法的方便了:
<img src="https://pic3.zhimg.com/972289d2659f965081cc0ac2e8a8de02_b.png" data-rawwidth="811" data-rawheight="459" class="origin_image zh-lightbox-thumb" width="811" data-original="https://pic3.zhimg.com/972289d2659f965081cc0ac2e8a8de02_r.png">1、显示了参数的值:就这一点,我想就会节省我们phper很多的调试时间(默认不显示参数值,只显示调用的函数。需要添加xdebug.collect_params这个配置)
1、显示了参数的值:就这一点,我想就会节省我们phper很多的调试时间(默认不显示参数值,只显示调用的函数。需要添加xdebug.collect_params这个配置)
2、显示了代码的执行轨迹。类似于c语言的单步调试吧。
就这些了,反正用了xdebug,我是觉得debug的时候节省了大量时间,分享给大家,希望对你们也有帮助。
有哪些 PHP 调试技巧?的更多相关文章
- 【工具】VS2010常用调试技巧(1)
调试是一个程序员最基本的技能,其重要性不言自明.不会调试的程序员就意味着他即使会一门语言,却不能编制出好的软件.本文就本人在开发过程中常用的调试技巧作下简单呢介绍,希望对大家有所帮助,能力超群者请绕道 ...
- Visual Studio高级调试技巧
1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...
- 【转】你所不知道的Android Studio调试技巧
这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...
- VS调试技巧,提高调试效率(转):
如果你还没有使用过这些技巧,希望这篇博文能帮你发现它们. 它们学起来很容易,能帮你节省很多时间. 运行到光标(Ctrl+ F10) 我经常看见人们是这样来调试应用程序的: 他们在应用程序需要调试的代码 ...
- iOS各种调试技巧豪华套餐
转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...
- xcode调试技巧
xode报错有时挺无厘头,完全不知道哪里出的问题,最后还得用排除法,记录一些工作中认为有用的调试技巧 1.左侧视图点断点视图,左下角点加号,选择exception breakpoint,类型选c++, ...
- 你所不知道的Android Studio调试技巧
转载:http://www.jianshu.com/p/011eb88f4e0d Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug ...
- Visual Studio原生开发的20条调试技巧(下)
我的上篇文章<Vistual Studio原生开发的10个调试技巧>引发了很多人的兴趣,所以我决定跟大家分享更多的调试技巧.接下来你又能看到一些对于原生应用程序的很有帮助的调试技巧(接着上 ...
- Visual Studio原生开发的10个调试技巧
这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托 ...
- Visual Studio的调试技巧
Visual Studio的调试技巧 [原文地址] Debugging Tips with Visual Studio 2010 [原文发表日期] 2010/8/19 10:48 AM 这是我写的关于 ...
随机推荐
- PHP 获取服务器详细信息【转】
碰到此问题,做下记录 获取系统类型及版本号: php_uname() (例:Windows NT COMPUTER 5.1 b ...
- JSP lifecycle - with servlet
编译阶段: servlet容器编译servlet源文件,生成servlet类 初始化阶段: 加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法 执行阶段: 调用与JSP对应的serv ...
- 笔记 《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 》
阅读此书的笔记点: 此书目录即是对知识点最好的总结 第1章 熟悉Objective-C ---------------------------------------------- 第1条:了解Obj ...
- 如何在大量jar包中搜索特定字符
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- Android LayoutParams
LayoutParams继承于Android.View.ViewGroup.LayoutParams,就是布局. LayoutParams相当于一个Layout的信息包,它封装了Layout的位置.高 ...
- CentOS怎样查看系统信息
一.查看系统版本和核心版本 1 登陆CentOS,启动终端. 2 登陆root帐户,输入 cat /etc/redhat-release,即可显示系统版本. 3 输入 uname -r ,可以查询 ...
- Matlab安装记录 - LED Control Activex控件安装
Matlab安装记录-LED Control Activex控件安装 2013-12-01 22:06:36 最近在研究Matlab GUI技术,准备用于制作上位机程序:在Matlab GUI的技术 ...
- python知识总结
LIST:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素,用[]包裹.例如 classmates = ['Michael', 'Bob', 'T ...
- ThreadLocal 那点事儿
原文出处: 黄勇 ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVaria ...
- EasyUI tab常用
获取选中的tab的title var tab = $('#tab_Employee').tabs('getSelected'); var t=tab.panel('options').title; t ...