如何使用gdb查看php中变量的zval结构

该笔记来自于陈雷的公开课

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 处设置断点,打印变量结构体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值