该笔记来自于陈雷的公开课
https://www.imooc.com/video/18431/0
如何使用gdb查看php中变量的zval结构
a.php
<?php
$a = 10;
echo $a;
$b = 20.1;
echo $b;
$c = $a;
echo $c;
gdb或者cgdb,使用cgdb界面更人性化,以php7.1.0为例
gdb php
b execute_ex
r a.php
然后一路n下去,一直到 第一个handler处,
s进入函数执行。
可以看到进入赋值函数 ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER
然后继续n,把赋值函数执行完,
第二次进入handler函数,可以看到
此时变成了echo的handler ZEND_ECHO_SPEC_CV_HANDLER
继续n,
到这一步就可以 p *z了,
其他类似。
另外一个方法
$a = 1;
echo $a;
通过添加echo语句,在 ZEND_ECHO_SPEC_CV_HANDLER 处设置断点,打印变量结构体