php内核编译,如何使用vscode调试内核逻辑走向?
发布于 作者:苏南大叔 来源:程序如此灵动~前面的php
内核的文章,主要重在编译部分。本文说另外一种可能性,就是对php
内核进行debug。单步调试,看代码逻辑走向。虽然这个部分听起来很复杂,但是也是一个方向对吧?另外值得说明的是:这个是对php
内核的调试,实际上是c
/c++
语言的调试,并不是php
语言的调试。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文记录,使用vscode
调试php
内核的故事。当然了,对于目前的苏南大叔来说,说“调试”这个词有点大。或者我们换个说法,对php
内核逻辑进行断点。这样似乎就可信多了。本文测试环境:win10
,php@7.4.28
,vscode@1.66.0
。
编译debug
版php
这里就是常规编译php
内核,但是需要特别注意的是:configure
的参数,需要启用cli
和debug
。比如:下面的参数参数就是个非常好的配置:
configure --disable-all --enable-cli --enable-phar --enable-debug
重点是--enable-debug
,启用cli
只是因为cli
下比较适合本文下描述的环境。这里主要启用的是debug
,只有debug
是调试内核c
语言的。而不是xdebug
,也不是phpdbg
,它们是有区别的。
可以参考文章:
安装c/c++
插件
这里需要vscode
安装一个c/c++
插件,在插件市场里面很容易找到并安装好。如下图所示:
注意:c++
是c
语言的超集。两者目前都是使用visual studio
里面的vc toolset
进行编译的。
配置.vscode/launch.json
vscode
打开phpsrc
,然后在不打开.php
文件的情况下,按f5
键。就会有选择调试环境的选择,选择windows
。然后就可以配置文件了。
下面是个配置范例:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "php source code debugger",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/x64/Debug_TS/php.exe",
"args": ["info.php"],
"stopAtEntry": true,
"cwd": "${workspaceFolder}/x64/Debug_TS/",
"environment": [],
"console": "externalTerminal"
}
]
}
下面的是主要的配置要点:
program
要指向debug
版本的php.exe
。cwd
为了简单起见,配置php.exe
所在的目录。info.php
是测试的php
,仅仅是个引子,放置在php.exe
旁边。stopAtEntry
要设置为true
,相当于有个自动的断点。启动程序后,会自动暂停。
开始调试
vscode
打开phpsrc
目录后,f5
开始调试,然后安装调试工具条的提示,step in
或者step over
即可。
- f5,运行
- f10,单步跳过
- f11,单步进入
- shift+f11,单步跳出
这里主要说一下断点位置,因为本文的调试方式是使用cli
,所以入口点是:sapi/cli/php_cli.c
,php_cli.c
里面的main
函数。而launch.json
文件里面配置了stopAtEntry
。开始的时候,会自动停顿,然后剩下的就是靠大家自己根据经验下断点了。
参考文献
- https://newsn.net/say/vscode-electron-debug-attach.html
- https://newsn.net/say/electron-vue-vscode-debug-main.html
综述
本文讲述了windows
环境下,使用vscode
调试php
内核的一个可能步骤。对于其它的操作系统,步骤上也应该是差不多的,这里就不做更多描述。
更多文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。