电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

PHP如何打印跟蹤調(diào)試信息

瀏覽:8日期:2022-09-07 16:04:35

對(duì)于大部分編譯型語言來說,比如 C 、 Java 、 C# ,我們都能很方便地進(jìn)行斷點(diǎn)調(diào)試,但是 PHP 則必須安裝 XDebug 并且在編輯器中進(jìn)行復(fù)雜的配置才能實(shí)現(xiàn)斷點(diǎn)調(diào)試的能力。不過,如果只是簡單的調(diào)試并且查看堆棧回溯的話,其實(shí) PHP 已經(jīng)為我們準(zhǔn)備好了兩個(gè)函數(shù),能夠讓我們非常方便的看到程序運(yùn)行時(shí)的調(diào)用情況。

debug_backtrace()

從這個(gè)方法的字面意思上就可以看出,它的意思就是調(diào)試回溯,返回的也正是一段回溯信息的數(shù)組。

function a_test($str){ echo 'Hi: $str', PHP_EOL; var_dump(debug_backtrace());}var_dump(debug_backtrace());a_test('A');// Hi: A/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:7:// array(1) {// [0] =>// array(4) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(12)// ’function’ =>// string(6) 'a_test'// ’args’ =>// array(1) {// [0] =>// string(1) 'A'// }// }// }

這個(gè)方法必須在函數(shù)中調(diào)用,在函數(shù)方法外部使用是不會(huì)有內(nèi)容的。從內(nèi)容中看,它輸出了關(guān)于這個(gè)函數(shù)的 __FILE__ 、 __LINE__ 、 __FUNCTION__ 、$argv 等信息。其實(shí)就是關(guān)于當(dāng)前打印這行所在函數(shù)的相關(guān)內(nèi)容。

我們當(dāng)然也可以多嵌套幾層函數(shù)來看一下打印出的內(nèi)容是什么。

function b_test(){ c_test();}function c_test(){ a_test('b -> c -> a');}b_test();// Hi: b -> c -> a// /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:7:// array(3) {// [0] =>// array(4) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(37)// ’function’ =>// string(6) 'a_test'// ’args’ =>// array(1) {// [0] =>// string(11) 'b -> c -> a'// }// }// [1] =>// array(4) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(33)// ’function’ =>// string(6) 'c_test'// ’args’ =>// array(0) {// }// }// [2] =>// array(4) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(40)// ’function’ =>// string(6) 'b_test'// ’args’ =>// array(0) {// }// }// }

沒錯(cuò),數(shù)組的輸出順序就是一個(gè)棧的執(zhí)行順序,b_test() 最先調(diào)用,所以它在棧底,對(duì)應(yīng)的輸出也就是數(shù)組中的最后一個(gè)元素。

在類中也是類似的使用方法。

class A{ function test_a(){$this->test_b(); } function test_b(){var_dump(debug_backtrace()); }}$a = new A();$a->test_a();// /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:90:// array(2) {// [0] =>// array(7) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(87)// ’function’ =>// string(6) 'test_b'// ’class’ =>// string(1) 'A'// ’object’ =>// class A#1 (0) {// }// ’type’ =>// string(2) '->'// ’args’ =>// array(0) {// }// }// [1] =>// array(7) {// ’file’ =>// string(93) '/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php'// ’line’ =>// int(95)// ’function’ =>// string(6) 'test_a'// ’class’ =>// string(1) 'A'// ’object’ =>// class A#1 (0) {// }// ’type’ =>// string(2) '->'// ’args’ =>// array(0) {// }// }// }

在類中使用的時(shí)候,在數(shù)組項(xiàng)中會(huì)多出一個(gè) object 字段,顯示的是這個(gè)方法所在類的信息。

debug_backtrace() 的函數(shù)聲明是:

debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] ) : array

其中 options 是有兩個(gè)常量可以定義,DEBUG_BACKTRACE_PROVIDE_OBJECT 表明是否填充 'object' 的索引;DEBUG_BACKTRACE_IGNORE_ARGS 是否忽略 'args' 的索引,包括所有的 function/method 的參數(shù),能夠節(jié)省內(nèi)存開銷。limits 可用于限制返回堆棧幀的數(shù)量,默認(rèn)為0返回所有的堆棧。

debug_backtrace() 以及下面要介紹的 debug_print_backtrace() 方法都是支持 require/include 文件以及 eval() 中的代碼的,在嵌入文件時(shí),會(huì)輸出嵌入文件的路徑,這個(gè)大家可以自行嘗試。

debug_print_backtrace()

這個(gè)方法從名稱也可以看出,它會(huì)直接打印回溯內(nèi)容,它的函數(shù)聲明和 debug_backtrace() 是一樣的,不過 $options 默認(rèn)是 DEBUG_BACKTRACE_IGNORE_ARGS ,也就是說,它只打印調(diào)用所在文件及行數(shù)。

function a() { b();}function b() { c();}function c(){ debug_print_backtrace();}a();#0 c() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:144]#1 b() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:140]#2 a() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:151]

另外就是這個(gè)函數(shù)不需要使用 var_dump() 或 print_r() 進(jìn)行輸出,直接使用這個(gè)函數(shù)就會(huì)進(jìn)行輸出。能夠非常快捷方便的讓我們進(jìn)行調(diào)試,比如在 laravel 這類大型框架中,我們?cè)诳刂破餍枰榭炊褩P畔r(shí),就可以使用 debug_print_backtrace() 快速地查看當(dāng)前的堆棧調(diào)用情況。而 debug_backtrace() 如果沒有指定 $options 的話,則會(huì)占用非常大的內(nèi)存容量或者無法完整顯示。

總結(jié)

今天介紹的這兩個(gè)函數(shù)能夠靈活地幫助我們調(diào)試代碼或者了解一個(gè)框架的調(diào)用情況。當(dāng)然,在正式的情況下還是推薦使用 Xdebug 加上編輯器的支持來進(jìn)行斷點(diǎn)調(diào)試,因?yàn)槭褂?debug_backtrace() 這兩個(gè)方法我們無法看到變量的變化情況。

測(cè)試代碼:

github.com/zhangyue050…

以上就是PHP如何打印跟蹤調(diào)試信息的詳細(xì)內(nèi)容,更多關(guān)于PHP打印調(diào)試信息的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | 挨踢网-大家的导航! | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 许昌奥仕达自动化设备有限公司 | 电车线(用于供电给电车的输电线路)-百科| 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | CNC机加工-数控加工-精密零件加工-ISO认证厂家-鑫创盟 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 |