运行/调试你的PHP代码
前言
没有任何一名程序员可以一气呵成、完美无缺的在不用调试的情况下完成一个功能或模块。调试实际分很多种情况。本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调试分三种,注意我所讲的是调试并非测试
- 功能调试
- 组件调试
- 片段调试
功能调试是指在完成一个功能或者正在完成功能的过程中进行的错误、逻辑、结果的测试
组件调试是指将一个正在开发测试的插件、类进行错误、逻辑和结果的测试
片段调试是指将一段代码片段、函数、变量的预期和结果的测试
接下来我们看下本章列出的一些调试方法
暴力调试
这种方式简单粗暴,一般PHP程序员都会用,那就是浏览器调试,在编辑器内写完代码后随后打开万能的浏览器输入地址开始调试代码。
断点调试
说实在的,这种方式如果仅仅是看看输出结果,完全没必要,看似高大上实际浪费时间经历,一般我都会在代码块写好之后跑一遍debug,检查一下流程和结果是否在我的预期内或者遇到了某些逻辑问题无法察觉,还是选择断点调试比较靠谱,省时省力。最厉害的程序员也有懵逼的一刻不是吗?
命令调试
如果你在官网或者github上下载了一段代码片段,急于调试但还不愿意将代码片段放入项目中或者新开辟一个目录,完全可以使用php命令去执行这个代码块
php -f filename.php
如果代码片段较短,你可以使用
php -r "code ..."
执行运行PHP代码
片段调试
当你突然想起一个方法或者算法急于去验证它,但又不愿意打开编辑器或者执行php自带的命令行的话。你可以选择使用psysh工具去执行验证你的想法,这个工具安装十分简单
Psy Shell v0.8.17 (PHP 7.1.14 — cli) by Justin Hileman
New version is available (current: v0.8.17, latest: v0.9.6)
>>> date('Y-m-d H:i:s',time())
=> "2018-08-09 14:18:10"
>>>
下载地址 : https://psysh.org/
测试调试
这是一个严肃的调试方法,很多程序员都认为功能模块、组件开发完就结束的任务,随后交给测试人员去测试就好了。其实并不然,有些隐藏的bug或者致命错误、逻辑错误、系统错误(例如开启了无用的线程,未使用的变量、方法、类等等)是无法被测试出来的。实际作为一名程序员,开发功能的流程是这样的。
理解需求 -> 分解需求 -> 整理逻辑 -> 设计代码 -> 敲代码 -> 调试 -> 测试
如果最后一步你从来没有做过,那你只能是半个程序员。 测试我推荐使用PHPunit,更好的去理解自己的代码,才是一个合格的程序员。
编辑器调试
感觉讲这个有点废话了,如果你感觉打开命令行然后输入 php xxxx 特别费劲的话,你也可以选择使用编辑器自带的调试,一般像sublime,visual Studio Code , PHPStrom 都会自带的调试工具,其原理依旧是调用 php -r 但总比打开命令行输入命令要快的多。
致谢
这并不是一篇酝酿了很久的文章,是在我日常的开发中经常使用的几种调试方法。
感谢你看到这里,希望本篇文章可以帮助到你,有什么问题可以在评论区留言。谢谢
运行/调试你的PHP代码的更多相关文章
- Spark菜鸟学习营Day6 分布式代码运行调试
Spark菜鸟学习营Day6 分布式代码运行调试 作为代码调试,一般会分成两个部分 语法调试,也就是确定能够运行 结果调试,也就是确定程序逻辑的正确 其实这个都离不开运行,所以我们说一下如何让开发的S ...
- vs2010旗舰版后,运行调试一个项目时调试不了,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40.exe(PID:2260”
具体问题描述: vs2010旗舰版后,运行调试一个项目时调试不了,能编译,按ctrl+f5 可以运行,但是就是调试就不行,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40 ...
- 新人如何运行Faster RCNN的tensorflow代码
0.目的 刚刚学习faster rcnn目标检测算法,在尝试跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代码时候遇到很多问题(我真是太菜),代码地址如下 ...
- 魔兽私服TrinityCore 运行调试流程
配置参见上一篇:TrinityCore 魔兽世界私服11159 完整配置 (1)启动Web服务器 打开TC2_Web_Mysql目录,运行“启动Web服务器.exe” 自动弹出帐号注册界面,并启动Ap ...
- LINUX上使用GDB单步调试Chromium Android C++代码。
###动机###在LINUX使用GDB单步调试Chromium Android C++代码. [1]编译android平台Chromium, 修改GN文件中编译选项:-g -O0 使得编译优化更少,便 ...
- 学习构建调试Linux内核网络代码的环境MenuOS系统
构建调试Linux内核网络代码的环境MenuOS系统 一.前言 这是网络程序设计的第三次实验,主要是学习自己编译linux内核,构建一个具有简易功能的操作系统,同时在系统上面进行调试linux内核网络 ...
- 利用 PhpStorm、Idea 等 IDE 如何 运行/调试 Go 程序 ?
以自己常用的 PhpStorm 为例 第一步:下载安装 Go插件 File -> Settings -> Plugins -> 输入关键字:Go 第二步:新建 Go项目 File - ...
- 在线运行Javascript,Jquery,HTML,CSS代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...
- alert一般用来调试客户端的javascript代码,以及更好的调试方法
alert一般用来调试客户端的javascript代码 调试利器--console.log 如今主流浏览器(Chrome,IE8及后续版本,FireFox,Opera等)都支持控制台功能. Chrom ...
随机推荐
- POJ2127 Greatest Common Increasing Subsequence
POJ2127 给定两个 整数序列,求LCIS(最长公共上升子序列) dp[i][j]表示A的A[1.....i]与B[1.....j]的以B[j]为结尾的LCIS. 转移方程很简单 当A[i]!=B ...
- bzoj1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...
- 使用Java实现图像分割
为减少动画制作过程中的IO操作,我们可以使用连续动画来改善动画播放效率.如果我们对图像中的每张小图像单独分割成独立的文件,那么当每次要使用这些小图像的时候,我们都得从文件中读取图像信息. 实际上我们可 ...
- 21. Ext中表格自适应高度
转自:https://blog.csdn.net/happy492/article/details/6401099 1. 下面的代码中width和height的初始值为tab的开始大小,当浏览器窗口变 ...
- WebService基于soapheader的身份验证
用WebService开发接口十分方便.但接口提供的数据不应是对所有人可见的,我们来利用SoapHeader写一个简单的身份验证Demo 目录 创建WebService项目(带SoapHeader) ...
- table样式测试总结tr td宽度分析
题外话:一直以来习惯布局用ul,li样式调整比较方便,不会互相影响出现一些问题,but~现在公司涉及很多表格打印,都是用table写的,好多宽度高度合并啊,组合啊~~~,单元格之间互相影响,有的样式设 ...
- VBNET AUTOCAD NETAPI 让插件随autocad启动
定义一个函数,随AutoCAD 启动加载当前程序集到autocad,涉及到写入注册表,注意这是在autocad内部加载dll之后处理的方法.... 写入HKLM表示所有登录的用户都会受影响(autoc ...
- npm install 安装软件,出现 operation not permitted, mkdir 'C:\Program Files\nodejs\node_cache'
问题如下图: 解决办法: 在开始菜单栏里打开cmd的时,右击选择“以管理员身份运行”.然后再在打开的cmd里运动install就没问题了. 这个问题应该是当时安装依赖时,我们是以管理员身份运行的:所以 ...
- NetCore Netty 框架 BT.Netty.RPC 系列随讲 —(前序) REST API 与 RPC 经典网络基础服务架构
在服务体系架构内,我们所知道的,有两种请求模型: Http 请求模型,以及 RPC 请求模型.因此,在一个互联网请求模型架构上,都是这两种的请求模型的向互组合. 下面给出两种常见的互联网经典基础架构图 ...
- ASP.NET SQL 总结
1.SQLSERVER服务器中,给定表 table1 中有两个字段 ID.LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句 ...