如何调试PHP/Zend扩展/模块的基础知识
温馨提示:这篇文章已超过503天没有更新,请注意相关的内容是否还可用!
《PHP源代码分析》第一章建立系统之准备工具、库及必须具有的基础知识PHP源代码分析V0.0.1第一章建立平台准备工具、库及必须具有的基础知识;怎么编译不同系统的版本?编译时的各个选项是哪个意思?源码的目录结构。如何建立一个PHP扩展/模块?怎么构建一个Zend扩展?怎么调试PHP?怎样调试PHP/Zend扩展?第二章PHP与SAPI的生命周期脚本的运行周期,一切从main()开始;模块/脚本的起始与中止函数;PHPSAPI协议;嵌入式PHP设计。第三章内存管理Zend的存储管理器框架;内存申请与释放流程,垃圾回收;持久化()第四章线程安全为何会有这个难题?Zend是怎样解决的?我能否该启用ZTS?各有哪些优缺点?怎么形成一个ZTS的程序/扩展?第五章变量与常量PHP中的数据类别。变量、常量与静态变量。引用计数模式;资源的构建与回收;将来字符串的支持、JIT支持。第六章函数函数的外部布局;函数的定义;怎么获取函数的参数、可选参数、参数默认值;数组的返回值;第七章类与对象类的外部布局(属性、方法);构造函数与析构函数;类的继承与转化(up与down);接口(轻量级的类),微观上与类的差异;类之间的up和down。
。第八章错误与异常什么是错误、什么是异常。两者的差别;怎么构建和抛出异常;try/catch的设计与实现;第九章流()支持这方面我接触较少,内容待定;第十章虚拟机脚本编译模式(词法分析、语法分析);脚本的执行模式(CALL||GOTO);各个符号表的功用;研发缓存器;开发PHP安装器;附录完整的PHPAPI、ZendAPI或者宏(Micro)参考(长期项目)Zend1的主要特点,与Zend2的主要区别;Zend3的主要特点,与Zend2的主要区别;相关资源项目发起:Ben(ben.yanatmsndotcom项目参与:Ben(ben.yanatmsndotcom,)项目启动:2007/06/09(希望可以在今年奥运会揭幕前完成)项目进度:2007/06/09项目推进,讨论工程规划;2007/xx/xx待续……/blog/-on-php--prep.html源码分析,首先得看源码。
记事本可以看php系统源码分析,也可以看,但仍然具备语法着色功能的要比记事本爽。更因此,M$的C++比需要爽。:D为此我推荐的第一款神兵就是M$C++(Sorry,~)。既然用了C++那么有一款它的插件我们不得不提:X,还没有她的同学尽快拥有她吧~OK,现在源码是可以看了,而且是很舒服地在看,但有时我们还想实地进行单步调试以一窥究竟。要调试自然得先编译。很不幸,PHP在环境下的编译和调试并不像想像中的这么简单。我们大约得比在xNix环境下多做一下几个方法:下载PHP使用的DNS解析器的源代码(/extra/.zip)并将其编译输出一个名为.lib的库文件。下载win32编译软件/extra/.zip,解压至某一目录(假设为$work)。在$work\lib目录上面还有个.lib,我们把方法1造成的.lib复制到这个目录,覆盖之。
设置编译环境。把$Work\bin添加到系统PATH环境变量和C++的files目录;把$work\lib添加到files目录;把$Work\添加到files目录。下载PHP源文件并解压至$work。整理PHP的项目工程文件。PHP4.x的VC工程文件($PHP\win32\*.dsw)是后来经常在维护的,因此可以直接用来就用。PHP5.x增加了一种新的基于命令行的类Unix编译平台,使得编译PHP更为简单。于是相应的工程文件*.dsw便不再被PHP团队维护,也不能直接使用编译PHP5了。但我们恰恰不想单纯的编译,我们想的是在C++里面进行编译之后下断点单步调试php系统源码分析,因此我们就必须命令行编译平台的编译步骤重建这个项目工程文件(也许还必须对这种文件做些必要的改动)。为便于大家不做重复性劳动,我把我今天用的PHP调试环境打包发上来,大家下载后直接解压到某一目录就能。所需另外做的也并非按照你解压的目录设定一下编译的环境变量(见步骤3),之后就可直接开启$work\win32打开.dsw。
这里是该PHPwin32VC编译项目包。工程文件表明:这似乎是个“精简版”PHP的工程文件,里面的PHP是php5.2.8的源码,但只包括date、、pcre、、、、这几个内建扩展。另外的sapi不能编译,要想编译它得再去下一份2的源码。除此此外还删除了大个别的测试脚本。最后再说一下预测PHP源代码所必须一些基础知识。首先似乎得有一定的C语言基础。在最终预测Zend时也许还必须一些编译器方面知识,最好能看懂一些lex&yacc的词汇文件(PHP采用的是flex和bison,但在语法层面相差无几)。最后是能有一定的调试技术。包括在VC++环境下的有源码调试技术和无源码的二进制代码调试技术(这些状况下我通常用)。其中C语言基础是需要的,而中间的两种知识/技术则可有可无,但有的话可以超过事半功倍之效。
本文来自网络,如有侵权请联系网站客服进行删除
还没有评论,来说两句吧...