本記事では、Xdebug と VSCode を使用して PHP のデバッグ環境を用意する方法について説明しています。
Xdebug を利用することで、ステップ実行でのデバッグを行えるようになります。
導入に少し手間がかかりますが、作業効率がかなり向上しますので、ぜひお試しください!
環境情報
本記事では、以下バージョンにてインストールを行った結果を掲載しています。
【サーバ側】
・OS:CentOS Stream 9
・Apache:2.4
・PHP:8.3
・Xdebug:3.3
【クライアント側】
OS:Windows 10
VSCode:1.92
イメージ図は以下の通りです。
黄色背景の部分が本手順でインストールする内容です。

※注意※
イメージ図の通り本手順では PHP の稼働しているサーバに Xdebug、VSCode server をインストールします。
サーバのリソースを消費しますので、導入する環境に応じたレベルの影響確認を実施されると良いかと思います。
クライアント PC の Windows10 上の VSCode の拡張機能 Remote – SSH を使いサーバに SSH 接続を行います。
そうすることで、サーバ上のソースコードをあたかもクライアント側の Windows10 の VSCode で操作しているようになります。
ステップ実行のデバッグ処理は、サーバ上の VSCode server と Xdebug との間で行われます。
イメージ図内に [ポイント] として記載していますが、その際対象の PHP ソースファイルはサーバ上のものとなります。
それではインストールしていきましょう!
Xdebug インストール
1.前提確認
はじめに PHP が稼働していることを確認しておきます。
php -v
# [check] => バージョンが表示されること
実行結果
[root@localhost ~]# php -v
PHP 8.3.10 (cli) (built: Jul 30 2024 13:44:37) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies
[root@localhost ~]# # [check] => バージョンが表示されること
PHP環境を未作成の場合は、こちらの記事を参考にご準備いただければと思います。
ブラウザ経由でも動作を確認しておきます。
ドキュメントルート配下に index.php を作成して下記コードを記載しておきます。
<?php
phpinfo();
ブラウザで http://192.168.56.88/index.php にアクセスし phpinfo の情報が見れることを確認しておきます。

2.Xdebug のインストール
事前に Xdebug のインストールに必要なパッケージのインストールをしておきます。
dnf info php-devel php-pear # インストール内容の確認
dnf install -y php-devel php-pear # インストール
実行結果
[root@localhost ~]# dnf info php-devel php-pear # インストール内容の確認
メタデータの期限切れの最終確認: 0:00:32 前の 2024年08月28日 21時50分43秒 に実施しました。
利用可能なパッケージ
名前 : php-devel
バージョン : 8.3.11
リリース : 1.el9.remi
Arch : x86_64
サイズ : 777 k
ソース : php-8.3.11-1.el9.remi.src.rpm
リポジトリー : remi-modular
概要 : Files needed for building PHP extensions
URL : http://www.php.net/
ライセンス : PHP-3.01 AND Zend-2.0 AND BSD-2-Clause AND MIT AND Apache-1.0 AND NCSA AND BSL-1.0
説明 : The php-devel package contains the files needed for building PHP
: extensions. If you need to compile your own PHP extensions, you will
: need to install this package.
名前 : php-pear
エポック : 1
バージョン : 1.10.14
リリース : 1.el9
Arch : noarch
サイズ : 356 k
ソース : php-pear-1.10.14-1.el9.src.rpm
リポジトリー : appstream
概要 : PHP Extension and Application Repository framework
URL : http://pear.php.net/package/PEAR
ライセンス : BSD-2-Clause AND BSD-3-Clause AND LGPL-3.0-or-later
説明 : PEAR is a framework and distribution system for reusable PHP
: components. This package contains the basic PEAR components.
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf install -y php-devel php-pear # インストール
メタデータの期限切れの最終確認: 0:00:40 前の 2024年08月28日 21時50分43秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
======================================================================================================================================
インストール:
php-devel x86_64 8.3.11-1.el9.remi remi-modular 777 k
php-pear noarch 1:1.10.14-1.el9 appstream 356 k
<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>
インストール済み:
autoconf-2.69-39.el9.noarch automake-1.16.2-8.el9.noarch cmake-filesystem-3.26.5-2.el9.x86_64
cpp-11.4.1-3.el9.x86_64 emacs-filesystem-1:27.2-9.el9.noarch gcc-11.4.1-3.el9.x86_64
gcc-c++-11.4.1-3.el9.x86_64 glibc-devel-2.34-117.el9.x86_64 glibc-headers-2.34-117.el9.x86_64
kernel-headers-5.14.0-496.el9.x86_64 keyutils-libs-devel-1.6.3-1.el9.x86_64 krb5-devel-1.21.1-3.el9.x86_64
libcom_err-devel-1.46.5-5.el9.x86_64 libkadm5-1.21.1-3.el9.x86_64 libmpc-1.2.1-4.el9.x86_64
libpkgconf-1.7.3-10.el9.x86_64 libselinux-devel-3.6-1.el9.x86_64 libsepol-devel-3.6-1.el9.x86_64
libstdc++-devel-11.4.1-3.el9.x86_64 libtool-2.4.6-46.el9.x86_64 libverto-devel-0.3.2-3.el9.x86_64
libxcrypt-devel-4.4.18-3.el9.x86_64 libxml2-devel-2.9.13-6.el9.x86_64 m4-1.4.19-1.el9.x86_64
make-1:4.3-8.el9.x86_64 openssl-devel-1:3.2.2-2.el9.x86_64 pcre2-devel-10.40-5.el9.x86_64
pcre2-utf16-10.40-5.el9.x86_64 pcre2-utf32-10.40-5.el9.x86_64 perl-AutoLoader-5.74-481.el9.noarch
perl-B-1.80-481.el9.x86_64 perl-Carp-1.50-460.el9.noarch perl-Class-Struct-0.66-481.el9.noarch
perl-Data-Dumper-2.174-462.el9.x86_64 perl-Digest-1.19-4.el9.noarch perl-Digest-MD5-2.58-4.el9.x86_64
perl-DynaLoader-1.47-481.el9.x86_64 perl-Encode-4:3.08-462.el9.x86_64 perl-Errno-1.30-481.el9.x86_64
perl-Exporter-5.74-461.el9.noarch perl-Fcntl-1.13-481.el9.x86_64 perl-File-Basename-2.85-481.el9.noarch
perl-File-Compare-1.100.600-481.el9.noarch perl-File-Copy-2.34-481.el9.noarch perl-File-Find-1.37-481.el9.noarch
perl-File-Path-2.18-4.el9.noarch perl-File-Temp-1:0.231.100-4.el9.noarch perl-File-stat-1.09-481.el9.noarch
perl-FileHandle-2.03-481.el9.noarch perl-Getopt-Long-1:2.52-4.el9.noarch perl-Getopt-Std-1.12-481.el9.noarch
perl-HTTP-Tiny-0.076-462.el9.noarch perl-IO-1.43-481.el9.x86_64 perl-IO-Socket-IP-0.41-5.el9.noarch
perl-IO-Socket-SSL-2.073-2.el9.noarch perl-IPC-Open3-1.21-481.el9.noarch perl-MIME-Base64-3.16-4.el9.x86_64
perl-Mozilla-CA-20200520-6.el9.noarch perl-NDBM_File-1.15-481.el9.x86_64 perl-Net-SSLeay-1.94-1.el9.x86_64
perl-POSIX-1.94-481.el9.x86_64 perl-PathTools-3.78-461.el9.x86_64 perl-Pod-Escapes-1:1.07-460.el9.noarch
perl-Pod-Perldoc-3.28.01-461.el9.noarch perl-Pod-Simple-1:3.42-4.el9.noarch perl-Pod-Usage-4:2.01-4.el9.noarch
perl-Scalar-List-Utils-4:1.56-462.el9.x86_64 perl-SelectSaver-1.02-481.el9.noarch perl-Socket-4:2.031-4.el9.x86_64
perl-Storable-1:3.21-460.el9.x86_64 perl-Symbol-1.08-481.el9.noarch perl-Term-ANSIColor-5.01-461.el9.noarch
perl-Term-Cap-1.17-460.el9.noarch perl-Text-ParseWords-3.30-460.el9.noarch perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch
perl-Thread-Queue-3.14-460.el9.noarch perl-Time-Local-2:1.300-7.el9.noarch perl-URI-5.09-3.el9.noarch
perl-base-2.27-481.el9.noarch perl-constant-1.33-461.el9.noarch perl-if-0.60.800-481.el9.noarch
perl-interpreter-4:5.32.1-481.el9.x86_64 perl-libnet-3.13-4.el9.noarch perl-libs-4:5.32.1-481.el9.x86_64
perl-mro-1.23-481.el9.x86_64 perl-overload-1.31-481.el9.noarch perl-overloading-0.02-481.el9.noarch
perl-parent-1:0.238-460.el9.noarch perl-podlators-1:4.14-460.el9.noarch perl-subs-1.03-481.el9.noarch
perl-threads-1:2.25-460.el9.x86_64 perl-threads-shared-1.61-460.el9.x86_64 perl-vars-1.05-481.el9.noarch
php-devel-8.3.11-1.el9.remi.x86_64 php-fedora-autoloader-1.0.1-7.el9.noarch php-nikic-php-parser5-5.1.0-1.el9.noarch
php-pear-1:1.10.14-1.el9.noarch php-process-8.3.11-1.el9.remi.x86_64 pkgconf-1.7.3-10.el9.x86_64
pkgconf-m4-1.7.3-10.el9.noarch pkgconf-pkg-config-1.7.3-10.el9.x86_64 tar-2:1.34-6.el9.x86_64
xz-devel-5.2.5-8.el9.x86_64 zlib-devel-1.2.11-41.el9.x86_64
完了しました!
[root@localhost ~]#
Xdebug をインストールします。
pecl install xdebug # インストール
# Build process completed successfully と出力されていればOK
実行結果
[root@localhost ~]# pecl install xdebug # インストール
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading xdebug-3.3.2.tgz ...
Starting to download xdebug-3.3.2.tgz (258,943 bytes)
.....................................................done: 258,943 bytes
102 source files, building
running: phpize
Configuring for:
PHP Version: 8.3
PHP Api Version: 20230831
Zend Module Api No: 20230831
Zend Extension Api No: 420230831
building in /var/tmp/pear-build-rootN9PWAJ/xdebug-3.3.2
running: /var/tmp/xdebug/configure --with-php-config=/usr/bin/php-config
<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>
Build process completed successfully
Installing '/usr/lib64/php/modules/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.3.2
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib64/php/modules/xdebug.so" to php.ini
[root@localhost ~]# # Build process completed successfully と出力されていればOK
実行結果の 22 行目に「You should add “zend_extension=/usr/lib64/php/modules/xdebug.so” to php.ini」と記載があるので、php.ini に追記します。
3.php.ini の設定
php.ini のファイル所在を確認します。
php -i | grep php.ini # php.ini のファイル所在確認
実行結果
[root@localhost ~]# php -i | grep php.ini # php.ini のファイル所在確認
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
[root@localhost ~]#
/etc/php.ini にあると確認できたので編集していきます。
cp -p /etc/php.ini /etc/php.ini.org # バックアップ
vi /etc/php.ini # 編集
以下を php.ini ファイルの末尾に追加します。
[xdebug]
zend_extension=/usr/lib64/php/modules/xdebug.so
バックアップと比較して変更箇所を確認します。
diff /etc/php.ini.org /etc/php.ini # 追記内容確認
実行結果
[root@localhost ~]# diff /etc/php.ini.org /etc/php.ini # 追記内容確認
1668a1669,1670
> [xdebug]
> zend_extension=/usr/lib64/php/modules/xdebug.so
[root@localhost ~]#
php.ini の設定が完了したので、サービスを再起動します。
systemctl restart php-fpm
systemctl restart httpd
4.インストール結果確認
php -v の表示内容を確認します。
php -v
# [check] => with Xdebug v3.x.x と表示されていること
実行結果
[root@localhost ~]# php -v
PHP 8.3.11 (cli) (built: Aug 27 2024 19:16:34) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.11, Copyright (c) Zend Technologies
with Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans
[root@localhost ~]#
実行結果の 5 行目に「with Xdebug v3.3.2」と表示されていることを確認できました。
php -i の結果に xdebug の内容があるか確認します。
php -i | grep xdebug
# [check] => xdebug 関連の設置値が表示されていること
実行結果
[root@localhost ~]# php -i | grep xdebug
xdebug
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
Enabled Features (through 'xdebug.mode' setting)
'xdebug://gateway' pseudo-host support => yes
'xdebug://nameserver' pseudo-host support => yes
xdebug.auto_trace => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.cli_color => 0 => 0
xdebug.client_discovery_header => HTTP_X_FORWARDED_FOR,REMOTE_ADDR => HTTP_X_FORWARDED_FOR,REMOTE_ADDR
xdebug.client_host => localhost => localhost
xdebug.client_port => 9003 => 9003
xdebug.cloud_id => no value => no value
xdebug.collect_assignments => Off => Off
xdebug.collect_includes => (setting removed in Xdebug 3) => (setting removed in Xdebug 3)
xdebug.collect_params => On => On
xdebug.collect_return => Off => Off
xdebug.collect_vars => (setting removed in Xdebug 3) => (setting removed in Xdebug 3)
xdebug.connect_timeout_ms => 200 => 200
xdebug.control_socket => time: 25ms => time: 25ms
xdebug.coverage_enable => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.default_enable => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.discover_client_host => Off => Off
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.file_link_format => no value => no value
xdebug.filename_format => no value => no value
xdebug.force_display_errors => Off => Off
xdebug.force_error_reporting => 0 => 0
xdebug.gc_stats_enable => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.gc_stats_output_dir => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.gc_stats_output_name => gcstats.%p => gcstats.%p
xdebug.halt_level => 0 => 0
xdebug.idekey => no value => no value
xdebug.log => no value => no value
xdebug.log_level => 7 => 7
xdebug.max_nesting_level => 512 => 512
xdebug.max_stack_frames => -1 => -1
xdebug.mode => develop => develop
xdebug.output_dir => /tmp => /tmp
xdebug.overload_var_dump => (setting removed in Xdebug 3) => (setting removed in Xdebug 3)
xdebug.profiler_append => Off => Off
xdebug.profiler_enable => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.profiler_enable_trigger => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.profiler_enable_trigger_value => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.profiler_output_dir => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.remote_autostart => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_connect_back => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_enable => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_host => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_log => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_log_level => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_mode => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_port => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.remote_timeout => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.scream => Off => Off
xdebug.show_error_trace => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.show_mem_delta => (setting removed in Xdebug 3) => (setting removed in Xdebug 3)
xdebug.start_upon_error => default => default
xdebug.start_with_request => default => default
xdebug.trace_enable_trigger => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.trace_enable_trigger_value => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trace_output_dir => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.trigger_value => no value => no value
xdebug.use_compression => 1 => 1
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
[root@localhost ~]#
設定値が出てきたので、インストールされているようです。
ブラウザからも確認してみます。

下にスクロールすると xdebug の設定を確認できました。
ちなみに、phpinfo(); ではなく xdebug_info(); でも同様の結果をWeb上で確認できます。
xdebug_info では、xdebug.xxxxx の設定値のドキュメントリンクが表示されるので、便利です。

Xdebug のインストールは問題なく行えたようです。
5.ステップ実行用の設定追加
ステップ実行用の Xdebug の設定を追加します。
php.ini の先ほど追加した 1,2 行目の後に、3,4,5 行目の内容を追加します。
[xdebug]
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.mode = develop,debug
xdebug.start_with_request = yes
xdebug.force_display_errors = 1
3,4行目の設定がステップ実行用の設定です。
以下の点は、ステップ実行に関係ないので、お好みで設定ください。
・5行目は、エラー発生時に画面にエラー内容を強制的に表示する
・3行目の develop を指定すると var_dump() の出力内容が見やすくなる
バックアップと比較して変更箇所を確認します。
diff /etc/php.ini.org /etc/php.ini # 追記内容確認
実行結果
[root@localhost html]# diff /etc/php.ini.org /etc/php.ini # 追記内容確認
1668a1669,1673
> [xdebug]
> zend_extension=/usr/lib64/php/modules/xdebug.so
> xdebug.mode = develop,debug
> xdebug.start_with_request = yes
> xdebug.force_display_errors = 1
[root@localhost html]#
php.ini の設定が完了したので、サービスを再起動します。
systemctl restart php-fpm
systemctl restart httpd
VSCode の拡張機能 Remote – SSH をインストール
本手順は 別記事 にしているのでそちらを参照ください。
VS Code server に拡張機能 PHP Debug をインストール
上記手順でサーバ環境に SSH で接続した状態で、サーバ上の VS Code(VC Code server)に拡張機能 PHP Debug をインストールしていきます。
インストール前は SSH 接続先の環境には、何もインストールされていないことが確認できます。

PHP Debug を検索してインストールします。

インストール後に SSH 接続している環境の INSTALLED 欄に PHP Debug が表示されていることを確認します。

デバッグの設定ファイル作成
ステップ実行デバッグをするための設定ファイルを作成していきます。
リモート接続した状態で、Run => Add Configuration をクリックします。

PHP を選択します。

.vscode/launch.json が自動生成されるので、以下内容を記載して保存します。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
SELinux 対策
ここまできたら必要なソフトウェアのインストールは完了ですが、SE Linux が有効な環境ではこのままではステップ実行ができない可能性がありますので対策をしていきます。
※SE Linux が無効もしくは導入されていないシステムの場合は本手順は不要です。
まずは、実際にステップ実行を試してみます。
①VS Code で Run And Debug 画面を開きます。
②test.php の 3行目にブレイクポイントを設定します。
③launch.json の name に設定した名前を選択した状態で ▶ を押しデバッグを開始します。
④Webブラウザから test.php にアクセスします。
ブレイクポイントを設定した 3 行目で処理が止まる想定でしたが、画面上に 3行目と5行目の var_dump()の内容が出力されてしまいました。
ステップ実行が機能していないようです。

xdebug ではステップ実行時にクライアントのポート9003に対して通信を行いますが、SELinux が導入されている環境では、その通信が拒否されていることが原因と思われます。
※ここでクライアントとは今回の構成では VSCode server のことを指しています。
監査ログを確認してみます。
※audit.log ファイルが見つからない場合は /var/log/messages ファイルを確認してみてください。
tail -3 /var/log/audit/audit.log
実行結果
[root@localhost audit]# tail -3 /var/log/audot/audit.log
tail: '/var/log/audot/audit.log' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
[root@localhost audit]# tail -3 /var/log/audit/audit.log
type=AVC msg=audit(1725174474.346:550): avc: denied { name_connect } for pid=772 comm="php-fpm" dest=9003 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0
type=SYSCALL msg=audit(1725174474.346:550): arch=c000003e syscall=42 success=no exit=-13 a0=7 a1=5638b3c6fff0 a2=10 a3=7fb63c7b841b items=0 ppid=737 pid=772 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=connect AUID="unset" UID="apache" GID="apache" EUID="apache" SUID="apache" FSUID="apache" EGID="apache" SGID="apache" FSGID="apache"
type=PROCTITLE msg=audit(1725174474.346:550): proctitle=7068702D66706D3A20706F6F6C20777777
[root@localhost audit]#
実行結果の 4 行目で以下の出力があり、9003 で拒否されていることがわかります。
type=AVC msg=audit(1725174474.346:550): avc: denied { name_connect } for pid=772 comm=”php-fpm” dest=9003 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0
SELinux の設定を変更していきます。
まずは SE Linux の設定に必要なパッケージをインストールしていきます。(導入済みの方は飛ばして下さい)
dnf info setroubleshoot-server # SELinux 設定用のパッケージ(確認)
dnf install -y setroubleshoot-server # SELinux 設定用のパッケージ(インストール)
実行結果
[root@localhost audit]# dnf info setroubleshoot-server # SELinux 設定用のパッケージ(確認)
利用可能なパッケージ
名前 : setroubleshoot-server
バージョン : 3.3.32
リリース : 1.el9
Arch : x86_64
サイズ : 324 k
ソース : setroubleshoot-3.3.32-1.el9.src.rpm
リポジトリー : appstream
概要 : SELinux troubleshoot server
URL : https://gitlab.com/setroubleshoot/setroubleshoot
ライセンス : GPL-2.0-or-later
説明 : Provides tools to help diagnose SELinux problems. When AVC messages
: are generated an alert can be generated that will give information
: about the problem and help track its resolution. Alerts can be configured
: to user preference. The same tools can be run on existing log files.
[root@localhost audit]#
[root@localhost audit]#
[root@localhost audit]# dnf install -y setroubleshoot-server # SELinux 設定用のパッケージ(インストール)
依存関係が解決しました。
=====================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=====================================================================================================================
インストール:
setroubleshoot-server x86_64 3.3.32-1.el9 appstream 324 k
依存関係のインストール:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
インストール済み:
checkpolicy-3.6-1.el9.x86_64 policycoreutils-python-utils-3.6-2.1.el9.noarch
polkit-0.117-13.el9.x86_64 polkit-libs-0.117-13.el9.x86_64
polkit-pkla-compat-0.1-21.el9.x86_64 python3-audit-3.1.5-1.el9.x86_64
python3-dasbus-1.4-5.el9.noarch python3-distro-1.5.0-7.el9.noarch
python3-libsemanage-3.6-2.el9.x86_64 python3-libxml2-2.9.13-6.el9.x86_64
python3-policycoreutils-3.6-2.1.el9.noarch python3-setools-4.4.4-1.el9.x86_64
python3-setuptools-53.0.0-13.el9.noarch setroubleshoot-plugins-3.3.14-4.el9.noarch
setroubleshoot-server-3.3.32-1.el9.x86_64
完了しました!
[root@localhost audit]#
HTTPモジュール(今回は php-fpm)からリモートポートへ接続できるように設定を変更します。
setsebool -P httpd_can_network_connect on
設定は以上です。
これでステップ実行ができるはずです。
ステップ実行デバッグを試す
以下の手順でデバッグを実行します。
①VS Code で Run And Debug 画面を開きます。
②test.php の 3行目にブレイクポイントを設定します。
③launch.json の name に設定した名前を選択した状態で ▶ を押しデバッグを開始します。
④Webブラウザから test.php にアクセスします。

VS Code 上で3行目で処理が止まり、ブラウザもタブがぐるぐるしているので、レスポンス待ち(サーバ側で処理中)ということが確認できます。
また、VS Code の画面左側には、変数の値が確認できます。
この後は、ステップイン・ステップオーバー等を行いデバッグをしていきます。
まとめ
本記事では、サーバ上で稼働しているPHPシステムを想定して、ステップ実行のできる設定を行いました。
ローカル上で稼働している PHP システムを利用して xdebug でステップ実行を行う方法と比べると設定箇所が多いですが、本番環境と近い構成の開発サーバに対してステップ実行でデバッグを行いたい時などに活用できるかと思います。
最後までお読みいただきありがとうございました。