错误和异常

错误

php程序自身的问题,一般是由非法的语法,环境问题导致

异常

一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误

错误异常继承关系

小括号表示php版本

php7下的常见错误异常类型

常见错误/异常代码 类型 try/catch set_error_handler set_exception_handler register_shutdown_function(均触发)
include/require "aaa" 错误
undefined() 异常
$arr=["a"=>1];echo $arr['b']; 错误
echo 1/0; 错误
intdiv(1,0) 异常
define("A",1);define("A",1); 错误
function a(); function a();//或者类的重复定义 错误
function add($a,$b){return $a+$b;} add(1); add(1,2,3);//自动忽略了多余的 异常
$a=1; foreach ($a as $k=>$v){ echo $k."--".$v; } 错误
include "parseError.php"; //parseError.php 有语法错误 异常
$a=null; $a->fun(); 异常

错误和异常的有关主要配置

  1. log_errors //开启记录错误日志
  2. display_errors //是否在页面展示错误日志
  3. error_reporting //错误级别
  4. error_log
  5. 如果该配置没有设置,则错误信息会被发送到 SAPI 错误记录器。
  6. 例如,出现nginx的错误日志中,或者在CLI中发送到 stderr
  7. 配置优先级别fpm>ini>nginx

错误/异常有关处理函数

https://www.php.net/manual/zh/ref.errorfunc.php

set_exception_handler

在exception_handler 调用后异常会中止

只能设置1个,未设置则返回NULL,再次设置返回上次的handler(5.5+),设置为NULL和restore_exception_handler()作用类似

set_error_handler

以下级别的错误不能由用户定义的函数来处理,独立于发生错误的地方: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT

如果错误发生在脚本执行之前,将不会 调用自定义的错误处理程序因为它尚未在那时注册

传入 null 重置处理程序到默认状态,同restore_error_handler()

handler里error_types 里指定的错误类型都会绕过 PHP 标准错误处理程序, 除非回调函数返回了 false

如果handler返回 false,标准错误处理处理程序将会继续调用

register_shutdown_function

不影响error_log的行为,可以多个

Yii里的异常和错误处理

  1. 出现错误-> 触发->错误的处理handler->错误处理handler抛出异常-》触发异常处理的hander->写日志/格式化输出
  2. 出现异常->触发异常处理的hander→写日志/格式化输出
  3. 出现fatal错误→触发 register_shutdown_function的handler->写日志/格式化输出

常见的查错

去哪找日志,陌生的项目怎么快速的找到日志

1.去error_log文件找(php-fpm.conf→php.ini→nginx的error_log) 一定要注意日志文件的权限(fpm 的worker进程是否可写)

2.找set_exception_handler,set_error_handler的返回

不找日志,重置错误处理

不想管自定义的错误处理

把错误,异常处理的handeler全部重置掉,只去标准里去找即可

  1. error_reporting(E_ALL);
  2. ini_set("display_errors","On");
  3. restore_exception_handler();
  4. restore_error_handler();

常用调试

基本简单的调试

  1. var_dump(),print_r(),var_export()
  2. Yii框架的帮助函数 比如 yii\helpers\VarDumper::dump/dumpAsString());

调用栈追踪

1.debug_backtrace(int $options = DEBUG_BACKTRACE_IGNORE_ARGS, int $limit = 0)

调用到此处,调用链关系,根据需要传需要的参数,节省开销

2.get_included_files()

按顺序打印加载文件的顺序助于调试

比如常驻的(swoole,workerman)可以通过这个看,修改某个php文件(此处是不是已经加载到内存),用不用重启服务

其它工具

Yii的debugger tool

为了调试方便对其他人不产生影响,可使用种cookie方式开启(外加ip白名单)方式,比较适合yii混编的页面调试

辅助配套的cookie-editor插件

https://chrome.google.com/webstore/detail/cookie-editor/iphcomljdfghbkdcfndaijbokpgddeno?hl=zh-CN

whoops(类似yii debugger tool)



点击左边可以代码到那里

chrome控制台

https://github.com/ccampbell/chromephp

页面有刷新跳转时 可以开启console日志保持模式

性能调试

xhprof+xhgui

xhprof

php错误异常及其排错的更多相关文章

  1. C#中准确跟踪错误异常所在的文件位置方法

    准确跟踪错误异常所在的文件位置方法是在发布改文件所在的DLL时候,把对应的pdb文件也一同发布. pdb文件是:PDB全称Program Database,不知道中文翻译叫什么.相信使用过VS的人对于 ...

  2. 错误/异常:java.io.FileNotFoundException: .\src\db.properties (系统找不到指定的路径。);的解决方法

    1.异常视图 2.解决方法 与之相关的部分代码: static{ try { //读取db.properties Properties props = new Properties(); FileIn ...

  3. Expo大作战(十七)--expo结合哨兵(sentry)进行错误异常记录

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. JAVA-JSP内置对象之exception对象用来处理错误异常

    相关资料:<21天学通Java Web开发> exception对象1.exception对象用来处理错误异常.2.如果要使用exception对象,必须指定page中的isErrorPa ...

  5. JavaScript 错误异常

    JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try ...

  6. 错误/异常:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/beans_common.xml]...的解决方法

    1.第一个这种类型的异常 1.1.异常信息:org.springframework.beans.factory.BeanCreationException: Error creating bean w ...

  7. 错误/异常:org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/shore/model/Husband.hbm.xml 的解决方法

    1.错误/异常视图 错误/异常描述:无效的映射异常,无法从xxxxx资源中解析映射文档 2.解决方法     出现这个异常,一般情况下是包名写错了.改回来即可. 看报错/异常的第一行,最后面,会提示你 ...

  8. 错误/异常:org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 的解决方法

    1.错误/异常视图 错误/异常描述:id的生成错误,在调用save()方法之前,必须先生成id. 2.解决方法     在对应的实体类的主键(id)的get方法上加上:@GeneratedValue( ...

  9. 错误/异常:org.hibernate.MappingException: Unknown entity: com.shore.entity.Student 的解决方法

    1.错误/异常视图 错误/异常描述:Hibernate配置文件 映射异常,不明实体类Student(org.hibernate.MappingException: Unknown entity: co ...

随机推荐

  1. 什么是sql注入?如何有效防止sql注入?

    一.什么是sql注入 利用程序员的代码bug,将输入的参数绕过校验并在系统中当做代码运行,从而攻击系统. 二.如何避免sql注入 1.对sql语句进行预编译 PreparedStatement类可以对 ...

  2. 如何建立一个JDBC程序?

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  3. Semaphore 有什么作用 ?

    Semaphore 就是一个信号量,它的作用是限制某段代码块的并发数.Semaphore 有一个构造函数,可以传入一个 int 型整数 n,表示某段代码最多只有 n 个线程可 以访问,如果超出了 n, ...

  4. jQuery--事件绑定|委派|切换

    一.事件的绑定 1.事件的绑定介绍 事件绑定: bind(type,fn) 给当前对象绑定一个事件.例如:A.bind("click",fn);类似A.click(fn) unbi ...

  5. 杭电OJ 1248 不死族巫妖王 完全背包问题 字节跳动 研发岗编程原题

    转载至:https://blog.csdn.net/ssdut_209/article/details/51557776 Problem Description不死族的巫妖王发工资拉,死亡骑士拿到一张 ...

  6. PID算法原理 一图看懂PID的三个参数

    找了好久这一篇算是很容易看懂的了  推荐给大家   写的十分清楚   原文作者DF创客社区virtualwiz LZ以前有个小小的理想,就是让手边的MCU自己"思考"起来,写出真正 ...

  7. carsim2016事件如何设置

    #carsim2016事件设置# 完成以下功能:车速低于60km/h时,加速,设置节气门开度为0.8,制动主斜体样式缸压力设为0:车速高于120km/h时,制动,设置节气门开度为0,制动主缸压力设置为 ...

  8. SVG中的坐标系统和坐标变换

    视野和世界 2D绘图中很多人会有一个误区,就是我绘图的区域是一个矩形区域.无论新建一个画布还是创建了一个容器,心里都想象里面有一个矩形区域.其实,在SVG当中,矩形区域只是视野,是我们看到的部分.实际 ...

  9. jboss7学习3-jboss安装 访问(外网)添加用户

    一.下载安装 1.下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本. 2.解压 jb ...

  10. vue-cropper裁剪上传

    效果图: 全部代码: npm install vue-cropper //首先 安装vue-cropper main.js全局引用: import VueCropper from 'vue-cropp ...