前言
根据自身环境依照下文准备资源,本文选取:
- PHP源码(php-7.2)
- PHP SDK(phpsdk-vs16-x86.bat)
- 调试用IDE(vscode)
目录结构:
资源准备
php-src
首先需要php源码,根据所需要选择版本
版本切换选择branch
php sdk
sdk用于构建php
github仓库有vs14-vs16三个版本的sdk,第二个是低php版本的sdk下载地址
对应选择vc版本查询见下文链接
如果忽略版本,直接选用最新的phpsdk-vs16.bat会报fatal error,由于向下兼容并无影响
调试用IDE
IDE选择vscode,需要安装c/c++扩展
源码编译
进入php-sdk-binary-tools
,运行phpsdk-vs16-x64.bat
(根据系统条件选择),正常运行会进入shell
cd进入php的源码目录../php-src-PHP-7.2
,使用以下命令更新、下载相关依赖组件
phpsdk_deps --update --branchmaster
中途报错可以忽略,由于vs16支持向下兼容
运行buildconf.bat
,生成configure.js
buildconf.bat
生成configure后,可以使用--help
查看参数
选择开启SAPI cli、开启debug模式、开启phar扩展;由于cli是单线程的,方便接下来的调试。然后运行configure
configure --disable-all --enable-cli --enable-debug --enable-phar
运行后会显示一些php的配置信息
无误后使用nmake
执行build,build过程可能会有众多warning,提示complete完成build
之后在php源码目录中的x64/Debug_TS
就生成了php.exe
测试
源码调试
使用vscode打开之前的php源码目录
这里我选择把待调试的php放在x64/Debug_TS
、也就是php.exe相同目录下
然后要把php文件关闭了才能进入c++调试,否则进入的是php调试
菜单Run->Start Debugging或F5开启调试,选择第二个C++(Windows)
然后会生成调试的配置文件.vscode/launch.json
,修改它
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "php-7.2 source code debugger",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/x64/Debug_TS/php.exe",
"args": ["test.php"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/x64/Debug_TS/",
"environment": [],
"console": "externalTerminal"
}
]
}
然后打开sapi\cli\php_cli.c
,在程序入口main函数打断点
启动调试即可
入口函数的头文件引用缺失不影响调试,这些报错都不需要理会
完
欢迎在评论区留言