PHP调试的强悍利器之PHPDBG(2)

...... prompt> b func#2 prompt> r demo::__construct:5 method 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"; val prompt> ev var_dump($var); string(3) "val" ......

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/248356622d3287a3f6632a187afb5f16.html