Home Backend Development PHP Tutorial PHP调试的强悍利器之PHPDBG

PHP调试的强悍利器之PHPDBG

Jun 20, 2016 pm 12:36 PM

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
Copy after login



注意:

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"; } ?>
Copy after login



文件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();?>
Copy after login



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>
Copy after login



要想加载要调试的php脚本,只需要执行exec命令即可。如下:

#phpdbg......prompt> exec ./test_phpdbg.php
Copy after login



当然我们也可以在启动phpdbg的时候,指定e参数。如下:

#phpdbg -e ./test_phpdbg.php
Copy after login



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......
Copy after login



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: }......
Copy after login



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....
Copy after login



通过上面的显示,我们可以知道。info break的显示结果中会把断点的类型也给显示出来。#后面的数字是断点号。我们可以根据断点号删除断点。

7、删除断点

和gdb命令不一样。phpdbg的删除断点不是delete命令,而是break del 命令。示例如下:

......prompt> break del 1[Deleted breakpoint #1]prompt>......
Copy after login



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>......
Copy after login



单步执行

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:....
Copy after login



继续执行

和gdb一样,phpdbg的继续执行命令也是continue,简写形式为c。

执行php代码

这个是phpdbg的一个特色。可以在调试的过程中使用ev命令执行任意的php代码。如:

......prompt> ev $var = "val";valprompt> ev var_dump($var);string(3) "val"......
Copy after login



可以通过这种方式,在调试过程中动态的修改变量值,查看执行效果。

以上就是本文的全部内容,轻松玩转调试利器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的相关应用

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1665
14
PHP Tutorial
1269
29
C# Tutorial
1249
24
PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

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.

Explain secure password hashing in PHP (e.g., password_hash, password_verify). Why not use MD5 or SHA1? Explain secure password hashing in PHP (e.g., password_hash, password_verify). Why not use MD5 or SHA1? Apr 17, 2025 am 12:06 AM

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 in Action: Real-World Examples and Applications PHP in Action: Real-World Examples and Applications Apr 14, 2025 am 12:19 AM

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: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

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

The Enduring Relevance of PHP: Is It Still Alive? The Enduring Relevance of PHP: Is It Still Alive? Apr 14, 2025 am 12:12 AM

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.

How does PHP type hinting work, including scalar types, return types, union types, and nullable types? How does PHP type hinting work, including scalar types, return types, union types, and nullable types? Apr 17, 2025 am 12:25 AM

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: Code Examples and Comparison PHP and Python: Code Examples and Comparison Apr 15, 2025 am 12:07 AM

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 vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

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.

See all articles