XDebugでPHPのソースコードをリモートデバッグする方法
はい、hebiです。
XDebugを使用してサーバー上にあるソースコードをリモートデバッグする方法を記事にしたいと思います。
環境
環境構築がまだの方は以下の記事からどうぞ!
XDebugとは
XDebugは、PHP プログラミング言語用のデバッグ拡張モジュールです。PHP スクリプトのデバッグを支援し、開発者が効率的にバグを見つけて修正できるようにします。XDebugを使用すると、以下のような機能が利用できます。
- スタックトレースの表示: エラーが発生した場合や、特定の箇所でスクリプトの実行が停止した場合に、スクリプトのスタックトレースを表示して、どの関数やメソッドが呼び出されているかを把握できます。
- 変数の監視: スクリプトの実行中に変数の値を監視し、変数の値がどのように変化するかを確認できます。
- 条件付きブレークポイント: 特定の条件が満たされたときにのみブレークポイントが発生するように設定できます。これにより、特定の状況下でのみコードの実行を一時停止して調査できます。
- リモートデバッグ: XDebugは、リモートマシン上の PHP スクリプトをローカルマシンからデバッグする機能も提供します。これにより、リモートサーバー上で発生する問題を効率的にデバッグできます。
今回は「4.リモートデバッグ」の方法について記事にします!
XDebugのインストール
XDebugの機能を利用できるようにサーバーにライブラリをインストールします。
php-develインストール
Amazon Linux 2023にXDebugをインストールするためには、PECL(PHP Extension Community Library)を使用する必要がありますが、PECLを使用するためにはphp-develをインストールします。
sudo yum install php-devel
PECLインストール
続いてPECLをインストールします。
sudo yum install php-pear
XDebuglインストール
XDebugをインストールします。
sudo pecl install xdebug
以下のようなメッセージが表示されると成功です。以降のXdebug設定でxdebug.soのパスが必要になるので控えておきましょう。
Build process completed successfully
Installing ‘/usr/lib64/php8.2/modules/xdebug.so‘
install ok: channel://pecl.php.net/xdebug-3.3.1
XDebug設定
以下のコマンドを実行し、XDebugの設定ファイルを作成します。
sudo nano /etc/php.d/xdebug.ini
以下の内容を入力してください。
zend_extensionにはインストール時に控えたxdebug.soのパスを入力します。
xdebug.client_portに指定したポートはデバッグの設定値やポートフォワーディングする際に必要になるので控えてください。
zend_extension=/usr/lib64/php8.2/modules/xdebug.so
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.log = "/var/log/xdebug.log"
xdebug.log_level=7
xdebug.discover_client_host=true
xdebug.client_port=9093
ApacheとPHP-FPMの再起動
上記の設定を適用するためにApacheとPHP-FPMを再起動します。
sudo systemctl restart httpd
sudo systemctl restart php-fpm
以上でサーバー側のインストールおよび設定が完了です。
Visual Studio Codeの設定
Visual Studio Codeでデバッグを行います。そのための設定を行っていきましょう。
PHP Debugのインストール
Visual Studio CodeのPHP Debugをインストールします。
launch.jsonの作成
デバッグするためにlaunch.jsonを作成します。
左にあるデバッグアイコンからlaunch.jsonを作成できます。
nameがListen for Xdebugになっている箇所を以下のように修正してください。
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9093,
"pathMappings":{
"/var/www/html/xxxx": "${workspaceFolder}"
}
portにはxdebug.iniに指定したポートを指定します。
pathMappingsにはローカルのファイルパスとリモートサーバーのファイルパスの間の対応関係を定義します。
以下の記事で作成したWebサービスを参考にした場合、xxxxの部分は「my_codeigniter_project」になります。
以上でVisual Studio Codeの設定完了です。
xdebug helperのインストール
google choromeの拡張機能Xdebug helperをインストールしてください。
インストールするとデバッグのアイコンが表示され、Debugにすると緑色アイコンになります。
ポートフォワードの設定
ポートフォワードを設定し、PHPのサーバへ接続を転送するようにします。
Rloginをダウンロード
Rloginをダウンロードします。
サーバー設定
ダウンロードしたRLogin.exeを実行し、以下の設定を行います。
ホスト名、TCPポート、ログインユーザー名を入力します。
「SS認証鍵」ボタンを押下し、pemファイルを指定してください。
プロトコル – ポートフォワード設定
以下のように設定してください。
protにはxdebug.iniに設定したポートを指定します。
以上でRLogin.exeの設定完了です。
RLogin.exeを実行し、Amazon Linux 2023にログインした状態にしましょう。
デバッグ準備
以下の状態にすることでデバッグができます!
RLogin.exeでAmazon Linux 2023にログインした状態
ChromeにてXdebug helperがDebug状態
Visual Studio CodeでF5でデバッグ実行した状態
ここではControllerのindexにブレイクポイントをはってます。
以上で準備が整いました!
デバッグ確認
ブラウザでCodeIgniterのホーム画面をアクセスしてみましょう!
以下のようにブレイクポイントで止めることができました!
最後に
XDebugでリモートデバッグできましたでしょうか?
障害調査でかなり効率が上がると思いますので是非利用してみてください!
次は、SFTPを設定し、ソースコードをサーバ上にパッと適用できる環境を作成しましょう!
最後までお読みいただきありがとうございました(^^)/