PHPのリモートデバッグについて

DBG Frequently Asked Questions

http://dd.cron.ru/dbg/faq.php

How does it work?

dbg 2.04(とそれ以前のバージョン)を使ったデバッグは、以下のような手順になる:

  • クライアント側PCでHTMLブラウザを起動し、デバッグ対象のPHPスクリプトのURLを指定する。これによってデバッグのプロセスが開始する。
  • サーバ側のPHPエンジンがそのPHPスクリプトの実行を開始する。
  • PHPエンジンは他の拡張と同じようにdbg拡張をロードし、その処理を開始する。
  • dbg拡張はPHPスクリプト実行を横取りし、PHPエンジンがPHPスクリプトの1行目を実行しようとするとき、dbgはphp.iniで設定されたマシンとの間でデバッグの通信セッションを確立しようとする。このマシンのアドレスとポートは、debugger.hostとdebugger.portにそれぞれ対応する。debugger.hostの値がclienthost(これは予約語である)の場合、dbgはクライアント側干すとのアドレスを自動的に検知する。dbgリスナーが実行された場合、この時点で次の新しいデバッグの通信セッションが開始する。

以下は省略。

なので、サーバ側がグローバルIPでクライアント側がNAPT/IP masqueradeの内側のローカルIPの場合、サーバ側からクライアント側に向けてのデバッグセッションは確立できない。以下のエラーメッセージが表示される。

failed to establish connection to client host on xxx.xxx.xxx.xxx:yyyy

FTPでパッシブでなくアクティブの場合にサーバからクライアントへの接続が張れないのと同じ理由。