免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

php錯(cuò)誤異常及其排錯(cuò)

 路小路的日常 2022-04-30 發(fā)布于河北

錯(cuò)誤和異常

錯(cuò)誤

php程序自身的問(wèn)題,一般是由非法的語(yǔ)法,環(huán)境問(wèn)題導(dǎo)致

異常

一般是業(yè)務(wù)邏輯上出現(xiàn)的不合預(yù)期、與正常流程不同的狀況,不是語(yǔ)法錯(cuò)誤

錯(cuò)誤異常繼承關(guān)系

小括號(hào)表示php版本

php7下的常見(jiàn)錯(cuò)誤異常類型

常見(jiàn)錯(cuò)誤/異常代碼類型try/catchset_error_handlerset_exception_handlerregister_shutdown_function(均觸發(fā))
include/require "aaa"錯(cuò)誤???
undefined()異常???
$arr=["a"=>1];echo $arr['b'];錯(cuò)誤???
echo 1/0;錯(cuò)誤???
intdiv(1,0)異常???
define("A",1);define("A",1);錯(cuò)誤???
function a(); function a();//或者類的重復(fù)定義錯(cuò)誤???
function add($a,$b){return $a+$b;} add(1); add(1,2,3);//自動(dòng)忽略了多余的異常???
$a=1; foreach ($a as $k=>$v){ echo $k."--".$v; }錯(cuò)誤???
include "parseError.php"; //parseError.php 有語(yǔ)法錯(cuò)誤異常???
$a=null; $a->fun();異常???

錯(cuò)誤和異常的有關(guān)主要配置

log_errors //開(kāi)啟記錄錯(cuò)誤日志display_errors  //是否在頁(yè)面展示錯(cuò)誤日志error_reporting //錯(cuò)誤級(jí)別error_log
    如果該配置沒(méi)有設(shè)置,則錯(cuò)誤信息會(huì)被發(fā)送到 SAPI 錯(cuò)誤記錄器。
    例如,出現(xiàn)nginx的錯(cuò)誤日志中,或者在CLI中發(fā)送到 stderr
    配置優(yōu)先級(jí)別fpm>ini>nginx

錯(cuò)誤/異常有關(guān)處理函數(shù)

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

set_exception_handler

在exception_handler 調(diào)用后異常會(huì)中止
只能設(shè)置1個(gè),未設(shè)置則返回NULL,再次設(shè)置返回上次的handler(5.5+),設(shè)置為NULL和restore_exception_handler()作用類似

set_error_handler

以下級(jí)別的錯(cuò)誤不能由用戶定義的函數(shù)來(lái)處理,獨(dú)立于發(fā)生錯(cuò)誤的地方: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 調(diào)用 set_error_handler() 函數(shù)所在文件中產(chǎn)生的大多數(shù) E_STRICT
如果錯(cuò)誤發(fā)生在腳本執(zhí)行之前,將不會(huì) 調(diào)用自定義的錯(cuò)誤處理程序因?yàn)樗形丛谀菚r(shí)注冊(cè)
傳入 null 重置處理程序到默認(rèn)狀態(tài),同restore_error_handler()

handler里error_types 里指定的錯(cuò)誤類型都會(huì)繞過(guò) PHP 標(biāo)準(zhǔn)錯(cuò)誤處理程序, 除非回調(diào)函數(shù)返回了 false
如果handler返回 false,標(biāo)準(zhǔn)錯(cuò)誤處理處理程序?qū)?huì)繼續(xù)調(diào)用

register_shutdown_function

不影響error_log的行為,可以多個(gè)

Yii里的異常和錯(cuò)誤處理

  1. 出現(xiàn)錯(cuò)誤-> 觸發(fā)->錯(cuò)誤的處理handler->錯(cuò)誤處理handler拋出異常-》觸發(fā)異常處理的hander->寫(xiě)日志/格式化輸出

  2. 出現(xiàn)異常->觸發(fā)異常處理的hander→寫(xiě)日志/格式化輸出

  3. 出現(xiàn)fatal錯(cuò)誤→觸發(fā) register_shutdown_function的handler->寫(xiě)日志/格式化輸出

常見(jiàn)的查錯(cuò)

去哪找日志,陌生的項(xiàng)目怎么快速的找到日志

1.去error_log文件找(php-fpm.conf→php.ini→nginx的error_log) 一定要注意日志文件的權(quán)限(fpm 的worker進(jìn)程是否可寫(xiě))
2.找set_exception_handler,set_error_handler的返回

不找日志,重置錯(cuò)誤處理

不想管自定義的錯(cuò)誤處理
把錯(cuò)誤,異常處理的handeler全部重置掉,只去標(biāo)準(zhǔn)里去找即可

error_reporting(E_ALL);ini_set("display_errors","On");restore_exception_handler();restore_error_handler();

常用調(diào)試

基本簡(jiǎn)單的調(diào)試

var_dump(),print_r(),var_export()
Yii框架的幫助函數(shù) 比如 yii\helpers\VarDumper::dump/dumpAsString());

調(diào)用棧追蹤

1.debug_backtrace(int $options = DEBUG_BACKTRACE_IGNORE_ARGS, int $limit = 0)
調(diào)用到此處,調(diào)用鏈關(guān)系,根據(jù)需要傳需要的參數(shù),節(jié)省開(kāi)銷
2.get_included_files()
按順序打印加載文件的順序助于調(diào)試
比如常駐的(swoole,workerman)可以通過(guò)這個(gè)看,修改某個(gè)php文件(此處是不是已經(jīng)加載到內(nèi)存),用不用重啟服務(wù)

其它工具

Yii的debugger tool

為了調(diào)試方便對(duì)其他人不產(chǎn)生影響,可使用種cookie方式開(kāi)啟(外加ip白名單)方式,比較適合yii混編的頁(yè)面調(diào)試

輔助配套的cookie-editor插件

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

whoops(類似yii debugger tool)


點(diǎn)擊左邊可以代碼到那里

chrome控制臺(tái)

https://github.com/ccampbell/chromephp

頁(yè)面有刷新跳轉(zhuǎn)時(shí) 可以開(kāi)啟console日志保持模式

性能調(diào)試

xhprof+xhgui

xhprof

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多