Debian 12 (bookworm) PHP8.2 Xdebug3.3

Xdebugの設置でつまづいたため、とりあえず最小限で試してみる。
(別Ver. Debian 10 (buster) PHP7.1 Xdebug2.9 - demandosigno

Xdebug: Documentation » Supported Versions and Compatibility

docker-compose.yml

version: '3'

services:
    php:
        image: php:8.2-apache
        volumes:
            - ./html:/var/www/html
        ports:
            - 8002:80
        container_name: php8.2

docker-compose up -d

# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"

# php -v
PHP 8.2.13 (cli) (built: Dec 19 2023 14:12:13) (NTS)

# apt update && apt upgrade
# service apache2 status
apache2 is running.
# apt install vim
# vim phpinfo.php

# apt install php-xdebug
Package php-xdebug is a virtual package provided by:
  php8.2-xdebug 3.2.0+3.1.6+2.9.8+2.8.1+2.5.5-3 [Not candidate version]
E: Package 'php-xdebug' has no installation candidate

パッケージからはダメでした。PECLで。

# pecl install xdebug
downloading xdebug-3.3.1.tgz ...
Starting to download xdebug-3.3.1.tgz (258,953 bytes)

Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20220829/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.3.1
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20220829/xdebug.so" to php.ini

Xdebug: Documentation » Installation
"Warning: You should ignore any prompts to add "extension=xdebug.so" to php.ini — this will cause problems."
警告: php.iniに "extension=xdebug.so "を追加するよう促されても無視すべきです。

PHPの設定

1. コマンドラインで php --ini を実行し、変更すべきPHPのiniファイルを見つける。

# php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini

もし、/etc/php/7.4/cli/conf.d/99-xdebug.ini のように xdebug を名前に含むファイルがあれば、このファイルを使用します。
このファイルが存在せず、conf.dや同様のディレクトリに他のファイルがある場合は、そこにも新しいファイルを作成できます。その場合、99-xdebug.iniと命名してください。
そうでない場合は、スクリプトまたはphp --iniコマンドで表示されるphp.iniファイルを修正してください。
php.iniファイルは1つだけではありません。多くのセットアップでは、コマンドライン用(多くの場合cli/php.ini)とウェブサーバー用(多くの場合fpm/php.ini)があります。

2. Add the following line to this PHP ini file:
zend_extension=xdebug

# cd /usr/local/etc/php/conf.d/
# vi 99-xdebug.ini
zend_extension=xdebug
[xdebug]
;xdebug.client_host = host.docker.internal // 自分の環境ではこれを記載するとVSCodeを立ち上げた時点でアプリに繋がらなくなった。この辺りの設定詳細がまだ理解できていません。
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 1
xdebug.client_port=9003

3. Restart your webserver, or PHP-FPM, depending on what you are using.

# php -v
PHP 8.2.13 (cli) (built: Dec 19 2023 14:12:13) (NTS)
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans

VSCode側の設定

VSCodeを立ち上げコンテナに繋ぐ。

VSCodeでLocalにインストールした拡張機能PHPdebugをクリックしてコンテナの方にもインストールする。

launch.jsonファイルを作成

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "${workspaceRoot}/html": "${workspaceRoot}/html"
            }
        }
    ]
}

デバッグ実行してからブラウザを開き、ブレークポイントで止まるか確認。問題なさそう。 Xdebug: Documentation » Xdebug 2 から 3 へのアップグレード

/* -----codeの行番号----- */