2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラクスAdvent Calendar 2024

Day 15

php-srcをデバックしてみた

Posted at

PHP(php-src)をコンパイルしてデバッグしてみたくなったので手順を残しておく。

環境

VS CodeDev Container環境を構築します。

ディレクトリ

|- .devcontainer/
|    |- devcontainer.json
|    |- Dockerfile
|
|- .vscode/
|    |- launch.json
|
|- php-src/
|
|- test.php

コンテナの設定

Deockerfile

Dockerfile
FROM ubuntu:latest

RUN apt-get update && apt-get upgrade -y \ 
&& apt-get install -y make \
git zip unzip gcc gdb autoconf bison re2c pkg-config libxml2-dev libsqlite3-dev

CMD ["/bin/bash"]
  • 基本的なPHPのビルドに必要なツールをインストールする

devcontainer.json

devcontainer.json
{
    "build": {
        "dockerfile": "Dockerfile",
        "context": ".."
    },
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-vscode.cpptools"
            ]
        }
    }
}
  • C/C++の拡張機能をインストールされるようにする
  • 必要な拡張がある場合はここで追加しておく

デバッグ用の設定

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Main",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/php-src/sapi/cli/php",  // ビルドしたPHP (CLI) のパス
            "args": ["${workspaceFolder}/test.php"],               // 検証したいPHPスクリプトのパス
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

  • GUIでデバッグできるように設定する

PHPをビルドする

git clone https://github.com/php/php-src.git
cd php-src
./buildconf
./configure --enable-debug
make -j4
cd ..

ビルドすると、./sapi/cli/phpにPHPのCLIが作成される

動作確認

> ./php-src/sapi/cli/php --version
PHP 8.5.0-dev (cli) (built: Dec 15 2024 17:10:01) (NTS DEBUG)
Copyright (c) The PHP Group
Zend Engine v4.5.0-dev, Copyright (c) Zend Technologies

デバッグをする

試しにvar_dumpをデバッグしてみる

test.php
<?php
var_dump("あ");

実行とデバッグからデバッグの開始を実行する

image.png

まとめ

開発チームでPHPのバージョンアップ対応を進める中でPHPの挙動を確認するためにphp-srcを見たり、PHPのカンファレンスで話を聞く中でPHPの中身をいじってみたいと興味が湧いてきたのでデバッグしてみました。
今後はAST(抽象構文技)とかOpecodeとかも理解したいなぁと考えています。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?