PHP调试的强悍利器之PHPDBG
PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境。
PHPDBG的目标是成为一个轻量级、强大、易用的PHP调试平台。可以在PHP5.4和之上版本中使用。在php5.6和之上版本将内部集成。
主要功能:
– 单步调试
– 灵活的下断点方式(类方法、函数、文件:行、内存地址、opcode)
– 可直接调用php的eval
– 可以查看当前执行的代码
– 用户空间API(userland/user space)
– 方便集成
– 支持指定php配置文件
– JIT全局变量
– readline支持(可选),终端操作更方便
– 远程debug,使用java GUI
– 操作简便(具体看help)
安装
为了使用phpdgb,你首先需要下载一个php的源码包。然后下载phpdgb的源码包,并放在php源码包的sapi目录下。最后,你就可以执行命令安装了。编译安装示例如下:
假设我们已经下载php的源码包,并放在了/home/php目录下。
#cd /home/php/sapi#git clone https://github.com/krakjoe/phpdbg #cd ../#./buildconf --force#./config.nice#make -j8#make install-phpdbg
注意:
1、如果你的php版本是php5.6或者更高的版本,phpdbg已经集成在php的代码包中,无需单独下载了。
2、编译参数中记得要加 –enable-phpdbg。
3、编译时参数,–with-readline 可以选择性添加。如果不添加,phpdbg的history等功能无法使用。
基本使用
1、参数介绍
phpdbg是php的一个sapi,它可以以命令行的方式调试php。常用参数如下:
The following switches are implemented (just like cli SAPI):
-n ignore php ini
-c search for php ini in path
-z load zend extension
-d define php ini entry
The following switches change the default behaviour of phpdbg:
-v disables quietness
-s enabled stepping
-e sets execution context
-b boring – disables use of colour on the console
-I ignore .phpdbginit (default init file)
-i override .phpgdbinit location (implies -I)
-O set oplog output file
-q do not print banner on startup
-r jump straight to run
-E enable step through eval()
Note: passing -rr will cause phpdbg to quit after execution, rather than returning to the console
2、常用功能
之前我们介绍过gdb工具。其实phpdbg和gdb功能有些地方非常相似。如,可以设置断点,可以单步执行,等。只是他们调试的语言不一样,gdb侧重于调试c或者c++语言,而phpdbg侧重于调试php语言。下面我们将对phpdbg的一些常用调试功能做下介绍。要调试的代码如下:
文件test_phpdbg_inc.php源代码如下:
<?php function phpdbg_inc_func(){ echo "phpdbg_inc_func \n"; } ?>
文件test_phpdgb.php的源代码如下:
<?php include(dirname(__FILE__)."/test_phpdbg_inc.php"); class demo{ public function __construct(){ echo __METHOD__.":".__LINE__."\n"; } public function func($param){ $param++; echo "method func $param\n"; } public function __destruct(){ echo __METHOD__.":".__LINE__."\n"; } } function func(){ $param = "ali"; $param = $param + "baba"; echo "function func $param\n"; } $demo = new demo(); $demo->func(1); func(); phpdbg_inc_func();?>
3、启动phpdbg
phpdbg安装成功后,会在安装目录的bin目录下。进入bin目录,直接输入phpdbg即可。如下:
#phpdeg[Welcome to phpdbg, the interactive PHP debugger, v0.4.0]To get help using phpdbg type "help" and press enter[Please report bugs to <http://github.com/krakjoe/phpdbg/issues>]prompt>
要想加载要调试的php脚本,只需要执行exec命令即可。如下:
#phpdbg......prompt> exec ./test_phpdbg.php
当然我们也可以在启动phpdbg的时候,指定e参数。如下:
#phpdbg -e ./test_phpdbg.php
4、查看帮助信息
如果你之前使用过其他的调试工具,你会发现phpdbg和他们比较相似。但是,你使用初期,还是会经常需要获取帮助信息。通过help命令我们可以获取帮助信息。
......prompt> helpphpdbg is a lightweight, powerful and easy to use debugging platform for PHP5.4+It supports the following commands:Information list list PHP source......
5、设置断点
设置断点的命令和gdb一样。都是break,简写形式为b。不过具体的命令参数还是有所差异的。和gdb的断点命令相同之处,它们都可以“按文件名:行号” 或者 行号的方式设置断点。除此之外,phpdbg还提供了一些针对php特有的设置断点的方式。如,根据opline设置断点,根据opcode设置断点等。
众所周知,php代码最终是解析成opcode,然后由php内核一条条执行。一条php语句,可能会解析成多条opcode。如果可以按opcode设置断点,我们就可以更精确的跟踪程序执行过程。下面我们来看看phapdbg设置断点的具体示例。
按opline设置断点:
这里所说的opline,就是以方法入口作为起点,当前代码的行号。如test_phpdgb.php文件中,第18行的代码“$param = $param + “baba”;”的opline就是 2。
......prompt> b func#2prompt> rdemo::__construct:5method func 2[Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 in func()#2 at ./test_phpdbg.php:18, hits: 1]>00018: $param = $param + "baba"; 00019: echo "function func $param\n";; 00020: }......
6、查看断点
和gdb一样,phpdbg也是使用info break命令查看断点。示例如下:
....prompt> info break------------------------------------------------File Breakpoints:#1 /home/hailong.xhl/test_phpdbg.php:10------------------------------------------------Opline Breakpoints:#0 7ff3219e1df0 (function breakpoint)------------------------------------------------Function opline Breakpoints:#0 func opline 2....
通过上面的显示,我们可以知道。info break的显示结果中会把断点的类型也给显示出来。#后面的数字是断点号。我们可以根据断点号删除断点。
7、删除断点
和gdb命令不一样。phpdbg的删除断点不是delete命令,而是break del 命令。示例如下:
......prompt> break del 1[Deleted breakpoint #1]prompt>......
break del 后面的数字1就是断点号。
8、查看代码
phpdbg查看代码的命令也是list。但是和gdb相比,使用的方式更多样一些。
显示指定函数的代码:
......prompt> l f func 00017: $param = "ali"; 00018: $param = $param + "baba"; 00019: echo "function func $param\n";; 00020: } 00021:prompt>......
单步执行
phpdbg的单步执行只有一个命令 step。和gdb的step命令差不多。都是一行一行的执行代码。注意,phpdbg是没有next命令的。
....prompt> s[Breakpoint #0 resolved at func#2 (opline 0x152ba40)][L19 0x152ba70 ZEND_ADD_STRING C2 @0 ./test_phpdbg.php]>00019: echo "function func $param\n";; 00020: } 00021:....
继续执行
和gdb一样,phpdbg的继续执行命令也是continue,简写形式为c。
执行php代码
这个是phpdbg的一个特色。可以在调试的过程中使用ev命令执行任意的php代码。如:
......prompt> ev $var = "val";valprompt> ev var_dump($var);string(3) "val"......
可以通过这种方式,在调试过程中动态的修改变量值,查看执行效果。
以上就是本文的全部内容,轻松玩转调试利器PHPDBG,希望大家喜欢。
延伸阅读
《PHP高级知识进阶》系列技术文章整理收藏
1PHP调试的强悍利器之PHPDBG
2PHP 性能分析(一): XHProf & XHGui 介绍
3现在写 PHP,你应该知道这些
4PHP 之 FastCGI 与 mod_php 详解
5PHP 性能分析与实验:性能的微观分析
6PHP配置文件php.ini中文翻译(全)
7PHP的命令行命令使用指南
8在Linux系统的服务器上隐藏PHP版本号的方法
9PHP SOCKET编程详解
10php中关于socket的系列函数总结
11正确的PHP匹配UTF-8中文的正则表达式
12PHP性能分析工具XHProf安装使用教程
13百度工程师讲PHP函数的实现原理及性能分析(三)
14百度工程师讲PHP函数的实现原理及性能分析(二)
15百度工程师讲PHP函数的实现原理及性能分析(一)
16php以fastCGI的方式运行时文件系统权限问题及解决方法
17PHP中的Streams详细介绍
18PHP SPL标准库之数据结构队列(SplQueue)和优先队列(SplPriorityQueue)
19xss攻击知识入门整理
20PHP SPL标准库之数据结构双链表(SplDoublyLinkedList)
21PHP SPL标准库之数据结构固定长度数组(SplFixedArray)
22php利用反射实现插件机制的方法
23php压缩和解压缩字符串的方法
24PHP自带Session隐患(session文件独占锁引起阻塞)
25Cookie与Session的区别-总结很好的文章
26推荐给开发者的11个PHP框架
27xhprof安装&&使用
28PHP多线程之内部多线程实例分析
29PHP使用QPM实现多进程并行任务处理程序
30PHP多进程处理并行处理任务实例
31PHP多线程编程之管道通信实例分析
32PHP守护进程实例
33php查询mysql大量数据造成内存不足的解决方法
34PHP异常处理
35php开启多进程的方法
36HHVM 是如何提升 PHP 性能的?
37PHP开发者应了解的24个超酷的PHP库(微框架)
38php使用iconv中文截断问题的解决方法
39nginx下支持PATH_INFO详解
40PHP实现的带超时功能get_headers函数
41PHP中实现获取IP和地理位置类分享
42利用XDebug分析PHP程序,找出性能瓶颈
43PHP 开发者该知道的5个 Composer 小技巧
44php中使用session防止用户非法登录后台的方法
45PHP依赖管理工具Composer入门教程
46PHP实现将浏览历史页面网址保存到cookie的方法
47PHP中使用imagick生成PSD文件缩略图教程
48朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
49PHP callback函数使用方法和注意事项
50PHP Session可能会引起并发问题
51smarty自定义函数htmlcheckboxes用法实例
52php采集自中央气象台范围覆盖全国的天气预报代码实例
53session机制详解以及session的相关应用

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1
強大的PHP整合開發環境