一步一步教你在Windows下调试PHP解释器

当接触到PHP内核,或者说PHP解释器相关的开发时,调试自然也是一个无法绕过的话题。但不知为何,我搜了一圈,无论中文还是英文的资料,找到的要么是调试PHP代码,而非PHP解释器,要么就是在Linux下用gdb去进行调试,并没有在Windows下的相关教程,因此我就决定还是自己来写一篇吧。

在开始之前,需要说明的是,本文侧重在如何去进行调试,因此会假定你已经有一些基础知识,比如能够成功地搭建在Windows下的编译环境并且已经自己成功编译出一个能够执行的PHP解释器了。

并不知道如何在Windows下编译出一个PHP解释器?没关系,PHP官方提供了一份同样是手把手的教程来教你。什么?你说你看不懂英文?不会装visual studio?唔,我只能说,编译一个PHP解释器这件事情还是有一些门槛的,而且比用PHP写程序高得多,所以我也爱莫能助了o(╯□╰)o

首先,你要编译出一个带debug symbols的PHP,也就是在configure的时候记得带上--enable-debug,例如(为了简化说明,本文中仅编译了cli一个sapi,并且没有启用任何扩展):

buildconf --force
configure --disable-all --enable-cli --enable-debug
nmake

如图,如果你成功地编译完了,那么一个php.exe应该已经在 Debug_TS 目录下躺着等你了。

有小朋友也许会好奇,Debug_TS 目录最后的TS是什么。这个代表着 Thread Safety,因为这不是本文想介绍的内容,所以可以自己谷歌下来查找更多的资料。如果想要关闭它的话,可以在configure的时候加上--disable-zts

然后,打开Visual Studio,我使用的是VS2017社区版。不同的版本也许会有细微的差别,可以参考本文最后的资料去查看不同版本的具体方法。点击『文件』——『打开』——『项目/解决方案』,找到刚才 Debug_TS 目录下的 php.exe,打开它。

下一步,打开你想要断点的源文件(你可以直接把文件拖进visual studio,我觉得这是最快的打开方式)。打上断点。

一般来说,接下来就是启动了。可是平常在命令行下我们能够直接把要执行的PHP文件名字打在后面,但是在VS中似乎点击启动就直接开始执行了,并没有这么一个机会?没关系,点击『调试』——『php属性』,在『参数』里填写你要执行的PHP文件的完整路径。如果你有更多的参数也可以一同附加在后面。

最后,点击那个绿色的小箭头(启动),开始你蛋疼愉快的调试之旅吧。

参考资料:

      https://wiki.php.net/internals/windows/stepbystepbuild
      https://msdn.microsoft.com/zh-cn/library/0bxe8ytt.aspx?f=255&MSPPError=-2147217396

发表评论

电子邮件地址不会被公开。 必填项已用*标注