PHP调试的强悍利器之PHPDBG
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的相关应用

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.
