用vscode调试php源码

编程知识 更新时间:2023-04-05 18:27:09

背景

最近在阅读陈雷大神的《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通讯的

centos上
>>> 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/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/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一样

效果如下图,是不是很棒

如何调试php拓展

总结

1.linux机器上下载php源码
2.运行configure生成makefile
3.在vscode里安装c/c++插件
4.在vscode里远程打开项目
5.在.vscode里新建launch.json, tasks.json
6.开启远程调试之旅~

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

更多推荐

用vscode调试php源码

本文发布于:2023-04-05 18:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/3029a5171f3798a00b176c5afdb5b606.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   vscode   php

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 47139文章数
  • 14阅读数
  • 0评论数