编译安装

cd /home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29#Zend:核心源码# 查看配制选项,重要的是SAPI中的fpm,--debug,在make的时候gcc是o0,不会优化, 会显示细节,默认-o2
[parallels@eduline php-7.2.29]$ ./configure -h./configure --prefix=/home/parallels/Sys/php71 --enable-fpm --enable-debugmake && make install#可以看到过程
-I/usr/include -g -fvisibility=hidden **-O0** -Wall -DZEND_SIGNALS   -c /home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/Zend/zend_objects.c -o Zend/zend_objects.lo
/bin/sh /home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/libtool --silent --preserve-dup-deps --mode=compile cc    -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -IZend/ -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/Zend/ -DPHP_ATOM_INC -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/include -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/main -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29 -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/ext/date/lib -I/usr/include/libxml2 -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/ext/sqlite3/libsqlite -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/TSRM -I/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/Zend#安装完成
Installing shared extensions:     /home/parallels/Sys/php71/lib/php/extensions/debug-non-zts-20170718/
Installing PHP CLI binary:        /home/parallels/Sys/php71/bin/
Installing PHP CLI man page:      /home/parallels/Sys/php71/php/man/man1/
Installing PHP FPM binary:        /home/parallels/Sys/php71/sbin/
Installing PHP FPM defconfig:     /home/parallels/Sys/php71/etc/
Installing PHP FPM man page:      /home/parallels/Sys/php71/php/man/man8/
Installing PHP FPM status page:   /home/parallels/Sys/php71/php/php/fpm/
Installing phpdbg binary:         /home/parallels/Sys/php71/bin/
Installing phpdbg man page:       /home/parallels/Sys/php71/php/man/man1/
Installing PHP CGI binary:        /home/parallels/Sys/php71/bin/
Installing PHP CGI man page:      /home/parallels/Sys/php71/php/man/man1/
Installing build environment:     /home/parallels/Sys/php71/lib/php/build/
Installing header files:          /home/parallels/Sys/php71/include/php/
Installing helper programs:       /home/parallels/Sys/php71/bin/program: phpizeprogram: php-config
Installing man pages:             /home/parallels/Sys/php71/php/man/man1/page: phpize.1page: php-config.1
Installing PEAR environment:      /home/parallels/Sys/php71/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.8
[PEAR] Console_Getopt - installed: 1.4.3
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.3
[PEAR] PEAR           - installed: 1.10.10
Warning! a PEAR user config file already exists from a previous PEAR installation at '/root/.pearrc'. You may probably want to remove it.
Wrote PEAR system config file at: /home/parallels/Sys/php71/etc/pear.conf
You may want to add: /home/parallels/Sys/php71/lib/php to your php.ini include_path
/home/parallels/Software/SysSoftware/php7internal/PHPtest/php-7.2.29/build/shtool install -c ext/phar/phar.phar /home/parallels/Sys/php71/bin
ln -s -f phar.phar /home/parallels/Sys/php71/bin/phar
Installing PDO headers:           /home/parallels/Sys/php71/include/php/ext/pdo/
# php 位置
/usr/local/Cellar/php@7.2

zval

// 位置:/usr/local/Cellar/php@7.2/7.2.27/include/php/Zend/zend_types.h
typedef union _zend_value {zend_long         lval;              /* long value */double            dval;             /* double value */zend_refcounted  *counted;zend_string      *str;zend_array       *arr;zend_object      *obj;zend_resource    *res;zend_reference   *ref;zend_ast_ref     *ast;zval             *zv;void             *ptr;zend_class_entry *ce;zend_function    *func;struct {uint32_t w1;uint32_t w2;} ww;
} zend_value;struct _zval_struct {zend_value        value;          /* value */union {struct {ZEND_ENDIAN_LOHI_4(zend_uchar    type,            /* active type */zend_uchar    type_flags,zend_uchar    const_flags,zend_uchar    reserved)     /* call info for EX(This) */} v;uint32_t type_info;} u1;union {uint32_t     next;                 /* hash collision chain */uint32_t     cache_slot;           /* literal cache slot */uint32_t     lineno;               /* line number (for ast nodes) */uint32_t     num_args;             /* arguments number for EX(This) */uint32_t     fe_pos;               /* foreach position */uint32_t     fe_iter_idx;          /* foreach iterator index */uint32_t     access_flags;         /* class constant access flags */uint32_t     property_guard;       /* single property guard */uint32_t     extra;                /* not further specified */} u2;
};//搜索is_long
/* regular data types */
#define IS_UNDEF                    0
#define IS_NULL                     1
#define IS_FALSE                    2
#define IS_TRUE                     3
#define IS_LONG                     4
#define IS_DOUBLE                   5
#define IS_STRING                   6
#define IS_ARRAY                    7
#define IS_OBJECT                   8
#define IS_RESOURCE                 9
#define IS_REFERENCE                10//搜索:
/* zval.u1.v.type_flags */
#define IS_TYPE_CONSTANT            (1<<0)
#define IS_TYPE_REFCOUNTED          (1<<2)
#define IS_TYPE_COPYABLE            (1<<4)

gdb 调试

UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。

[root@eduline php-7.2.29]# yum install gdb
#进入调试模式
gdb /home/parallels/Sys/php71/bin/php
#打断点
b ZEND_ECHO_SPEC_CV_HANDLER
#运行
r /home/parallels/Software/SysSoftware/php7internal/chapter3/zval.php#进入下一个断点continue
c#单步执行next
n# 查看指针
(gdb) p z
$1 = (zval *) 0x7ffff5e1e080
# 取值
(gdb) p *z
$2 = {value = {lval = 2, dval = 9.8813129168249309e-324,counted = 0x2, str = 0x2, arr = 0x2, obj = 0x2, res = 0x2,ref = 0x2, ast = 0x2, zv = 0x2, ptr = 0x2, ce = 0x2, func = 0x2,ww = {w1 = 2, w2 = 0}}, u1 = {v = {type = 4 '\004',type_flags = 0 '\000', const_flags = 0 '\000',reserved = 0 '\000'}, type_info = 4}, u2 = {next = 0,cache_slot = 0, lineno = 0, num_args = 0, fe_pos = 0,fe_iter_idx = 0, access_flags = 0, property_guard = 0, extra = 0}}
# 下一步
(gdb) n
# 问题:
Missing separate debuginfos, use: debuginfo-install glibc-2.17-292.el7.x86_64 libxml2-2.9.1-6.el7_2.3.x86_64 nss-softokn-freebl-3.44.0-8.el7_7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64# 查找:debuginfo-install
yum whatprovides debuginfo-install# 安装
yum install yum-utils# 安装:
debuginfo-install glibc-2.17-292.el7.x86_64 libxml2-2.9.1-6.el7_2.3.x86_64 nss-softokn-freebl-3.44.0-8.el7_7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64

0302 GDB调试走起【给PHP写插件】相关推荐

  1. GDB调试,看这一篇就够了

    项目需要用到GDB调试,那就重新写一篇gdb入门教程. 包括了普通调试.多线程调试.多文件调试. 一.准备 首先创建三个文件main.cpp.test.h.test.cpp //main.cpp #i ...

  2. gdb调试lua_gdb 调试入门,大牛写的高质量指南

    原标题:gdb 调试入门,大牛写的高质量指南 (点击上方公众号,可快速关注) 来源: 伯乐在线 - 道法子 如需转载,发送「转载」二字查看说明 没想到Brendan Gregg这样的大牛,会写出这样一 ...

  3. Linux基础 30分钟GDB调试快速突破

    引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...

  4. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

    注:本文重要信息使用 *** 屏蔽关键字. 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点. 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我 ...

  5. gdb 调试命令的使用及总结

    GDB: The GNU Project Debugger:http://www.gnu.org/software/gdb/documentation/ 参考:http://www.jianshu.c ...

  6. Linux系列学习(二) - Vim编辑器的介绍及使用、文件编译的过程、Makefile工具、Gdb调试器

    目录 引言: 基本命令补充: cat命令: man命令: head命令: tail命令: find命令: grep命令: ​​​​​​​grep命令与管道"|" 的结合使用: ta ...

  7. Ubuntu下正确姿势使用GDB调试Android Native进程

        Ubuntu下正确姿势使用GDB调试Android Native进程 前言   对于Android Native进程大家是既爱又恨啊,爱的是它能为我们的Android世界带来别样的精彩,狠的是 ...

  8. gdb调试查看CALL指令的压栈情况

    gdb调试查看CALL指令的压栈情况 文章目录 gdb调试查看CALL指令的压栈情况 CALL指令时压栈 使用gdb调试验证CALL指令压栈情况 查看_start标号断点执行前的情况 查看反汇编代码 ...

  9. centos gdb调试_Linux基础 30分钟GDB调试快速突破

    引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...

  10. GDB调试--以汇编语言为例

    #rpm -qa |grep  gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是I ...

最新文章

  1. yarn资源调度(网络搜集)
  2. 数字IC设计各种仿真波形文件
  3. java强制转换成float_在Java中什么时候double必须强制转换成float 就是要在数值后加f或者强制转换...
  4. 【Android测试】【第二节】Monkey工具
  5. PYTHON_DACORATOR
  6. 玩点不一样的,如何使用MATLAB实现批量修改文件后缀名,文件名,批量复制文件
  7. 机器人枪杀人类的时刻到了
  8. 通过hook实现禁止shift+delete快捷键
  9. 分享Silverlight/WPF/Windows Phone一周学习导读(4月11日-4月15日)
  10. AspxGridView 主子表设置
  11. 如何使用STM32F4的BootLoader和APP程序
  12. java新职篇:面向对象之抽象
  13. sublime text mac版实施输入处理程序的技巧
  14. will would 七大用法总结
  15. 汉王考勤 连接mysql_汉王考勤管理软件打开时出现:连接数据错误,请确认数据库服务器信息是否有误。这样该怎样解决?...
  16. 可视对讲行业洗牌进行时 企业应该何去何从?
  17. 北京工业大学 计算机学院分数线,2019年北京工业大学计算机专业录取分数线
  18. 又一次淡淡的感动——《鸡排英雄》观后感
  19. 卢卡斯定理扩展卢卡斯
  20. cad把图形切成两部分_CAD入门教程,最常用快捷键

热门文章

  1. JAVA计算机毕业设计实验室耗材管理系统(附源码、数据库)
  2. pass平台java,mPass 微服务开发平台
  3. 搭建Hadoop开发环境(全过程)
  4. Python库下载第三方镜像(清华/豆瓣)
  5. LINUX-VIM编辑器常用命令大全(超全)
  6. 神经网络在游戏中的应用,神经网络控制应用实例
  7. C语言计算器详细教程(四则运算、小数、括号)
  8. C语言程序设计 循环结构程序设计
  9. 在线音乐网站网站开发项目 ,第一篇
  10. “windows无法完成格式化”解决办法