vscode调试swoole源码

环境:Mac OS X

搭建环境工具:Docker

思路是通过Docker起一个Linux容器,然后通过vscodeRemote-SSH插件登陆进这个Linux容器。这样就可以在Mac OS X或者Windows下调试和Linux系统相关的代码了。

首先,git clone下我准备好的Dockerfile

1
git clone git@github.com:dockero/php_centos.git

php_centos的目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tree
.
├── Dockerfile
├── README.md
├── docker-compose.yml
└── etc
└── php.d
├── curl.ini
├── openssl.ini
├── swoole.ini
├── zip.ini
└── zlib.ini

2 directories, 8 files

其中,

Dockerfile用来构建镜像的,已经预先安装了phpswoole以及其他基础的扩展。

docker-compose.yml主要是在创建容器的时候设置一些环境变量。

etc目录则是存放php扩展的.ini文件。这里,我们一个扩展对应一个.ini文件。

除此之外,你在目录php_centos下需要自己创建一个.env文件,用来控制swoole的版本,以及设置公钥等。

这里是我的一份模板:

1
2
3
4
5
6
7
HTTP_PROXY=http://127.0.0.1:8080
HTTPS_PROXY=http://127.0.0.1:8080
CODEDIR_VOLUME=~/codeDir:/root/codeDir
HOST_SSH_PORT=9522
PASSWORD=123456
SWOOLE_VERSION=4.4.12
SSH_PUB_KEY=填写你的公钥

每个参数在README里面都有说明。

OK,我们编译镜像:

1
docker-compose build

然后启动容器:

1
docker-compose up -d

之后,我们执行命令:

1
ssh php

即可登陆容器了。(如果在登陆容器的时候,需要输入密码,你可以执行命令ssh-add 私钥来免密登陆)

然后,我们需要在vscode的同一个工作区里面存放PHP源码、Swoole源码、PHP测试脚本、.vscode目录。所有需要的东西如下:

1
2
3
4
5
6
tree -L 1
.
├── test.php
├── php-7.3.12
├── swoole-src
└── .vscode

我们在.vscode目录里面创建文件launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "debug swoole",
"type": "cppdbg",
"request": "launch",
"program": "/usr/bin/php",
"args": ["${file}"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

接下来,我们用vscode打开测试脚本test.php,并且停留在这个窗口(注意,必须在停留test.php窗口的时候点击调试才行),然后点击调试按钮即可进行Swoole源码的调试了。