一步一步教你在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

《一步一步教你在Windows下调试PHP解释器》上有2条评论

  1. 你好,感谢你的分享,我在执行nmake的时候发生了错误,提示:

    “-h 不是内部或外部命令………”

    1. 抱歉,因为你的评论被垃圾评论淹没了,所以现在才看到。
      建议你参考官方wiki里的构建教程(我在文章里有发)重来一遍,尤其是注意VS的版本是否正确,以及是否使用了VS提供的命令行而非原生的命令行(关系到相关环境变量,当然如果你精通这一块可以当我没说)

发表评论

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