用vscode调试php源码

  • 时间:
  • 浏览:
  • 来源:互联网

背景

最近在阅读陈雷大神的《PHP7底层设计与源码实现》,里面在用linux命令行里的gdb,如下图

>> gdb -tui php -ex "b main" -ex "r a.php"
>> b _zend_hash_init_int
>> continue

在这里插入图片描述
有两个问题
1.代码不够友好(没有高亮,目录树,标签页切换)
2.gdb使用复杂 gdb使用入门
3.查看变量和展示变量都很不直观(看看那个结构体)
由于没有clion的注册码又暂时不想买,于是打起了vscode的主意

环境

我平时学习的是看鸟哥linux私房菜时安装的virtualbox 虚拟机

[root@study 5]# uname -a                                                                                               
Linux study.centos.vbird 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

php的源码是按照《PHP7底层设计与源码实现》下载到了/home/cxm/php-7.4.5 里
希望能在完全的linux环境中学习,所以vscode对我而言就是一个本地客户端(参考vscode 远程连接插件),在这里插入图片描述

摸索

要使用vscode当然要阅读vscode的文档,尤其是c/c++相关的, 文档中从0开始让你调试C++代码,其实这个还是在远程linux上开启了一个gdb进程,然后和mac上vscode通讯的

ps aux | grep gdb

在这里插入图片描述
但是这里涉及到两个文件 tasks.json 和 languch.json
tasks.json实际上就是对命令行的一种包装,在php源码目录里执行完./configure 会生成 makefile文件,然后make就是编译源码(而不用手动调用gcc、g++,优化级别也在makefile里,如果查看变量是optimised out 就要把CFLAGS_CLEAN 中的O2 改成 O0,gcc和make也是一个大学问)
这样我们就有了自己的tasks.json文件

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make",
            "args": [],
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}

效果是这样的,label就是提示的那个build
在这里插入图片描述

这个是launch.json, 注意preLaunchTask要跟上面的tasks.json对应,我基本就是把系统的改了一下 (name, program, args, stopAtEntry/在源码第一行自动下断点/)改了一下,因为第一点php的cli程序不在根目录,第二点后面要跟个php文件才有调式的意义,这里可以看到那些${xxx}的变量,可以参考文档

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - 重新编译和调试php-cli",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/sapi/cli/php",
            "args": [
                "/home/cxm/php7book/5/a.php"
            ],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

这样点击左上角的绿色三角就可以调试了,中上方那一排按钮就是下一步,继续之类的,和其他IDE一样

效果如下图,是不是很棒
在这里插入图片描述

总结

vscode的纯英文文档看起来还有点吃力,json文件看起来也头大,但能升级自己的装备也是很值得花时间研究的。

本文链接http://element-ui.cn/article/show-42852.aspx