クライアントサイドツール:(Apacheなし、PHP)
Eclipse for PHP Developers
バージョン:Oxygen.2リリース(4.7.2)
ビルドID:20171218-0600
Redhat Enterprise Linux 6.9
Javaバージョン "1.8.0_101"
Java(TM)SEランタイム環境(ビルド1.8.0_101-b13)
Java HotSpot(TM)64ビットサーバーVM(ビルド25.101-b13、混合モード)
リモートサーバーPHP Webアプリは:
PHP 5.6.5
Zend Engine v2.6.0、Copyright(c)1998-2014 Zend Technologies
zend OPcache v7.0.4-dev、Copyright(c)1999-2014、by Zend Technologies
withXdebug v2.2.7、Copyright(c)2002-2015、by Derick Rethans
このトピックに関する以前の投稿を見つけました。やるべきことのすべてを理解していませんでした。理解できることを試してみましたが、うまくいきませんでした。ほとんどの場合、xdebug_break();を使用します。 (繰り返しますが、運がありません)
EclipseとXdebugを使用してリモートPHP Webサイトをデバッグしています。問題は、設定したブレークポイントでデバッガーを停止できないことです。
私はEclipseと「同期PHPプロジェクト」を使用してリモートPHP開発を行っています。Eclipse以外はコンピューターで実行されていません。
Eclipseを介してリモートサーバーでXdebugデバッガーを使用しています。
デバッガーを使用すると、index.phpに移動します。しばらくステップスルーして、変数の値を確認できます。
問題は、Xdebugが設定したブレークポイントのいずれでも停止しないことです。
Xdebug設定を含めています
問題を見つけて修正する方法に関する手がかりは大歓迎です
Xdebug設定:
xdebug support,enabled
Version,2.2.7
DBGp - Common DeBuGger Protocol,$Revision: 1.145 $
Directive,Local Value,Master Value
xdebug.auto_trace,Off,Off
xdebug.cli_color,0,0
xdebug.collect_assignments,Off,Off
xdebug.collect_includes,On,On
xdebug.collect_params,0,0
xdebug.collect_return,Off,Off
xdebug.collect_vars,Off,Off
xdebug.coverage_enable,On,On
xdebug.default_enable,On,On
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.extended_info,On,On
xdebug.file_link_format,no value,no value
xdebug.max_nesting_level,100,100
xdebug.overload_var_dump,On,On
xdebug.profiler_aggregate,Off,Off
xdebug.profiler_append,Off,Off
xdebug.profiler_enable,Off,Off
xdebug.profiler_enable_trigger,On,On
xdebug.profiler_output_dir,/tmp,/tmp
xdebug.profiler_output_name,cachegrind.out.%t.%s,cachegrind.out.%t.%s
xdebug.remote_autostart,Off,Off
xdebug.remote_connect_back,On,On
xdebug.remote_cookie_expire_time,3600,3600
xdebug.remote_enable,On,On
xdebug.remote_handler,dbgp,dbgp
xdebug.remote_Host,127.0.0.1,127.0.0.1
xdebug.remote_log,/var/log/xdebug/xdebug.log,/var/log/xdebug/xdebug.log
xdebug.remote_mode,req,req
xdebug.remote_port,9000,9000
xdebug.scream,Off,Off
xdebug.show_exception_trace,Off,Off
xdebug.show_local_vars,Off,Off
xdebug.show_mem_delta,Off,Off
xdebug.trace_enable_trigger,Off,Off
xdebug.trace_format,0,0
xdebug.trace_options,0,0
xdebug.trace_output_dir,/tmp,/tmp
xdebug.trace_output_name,trace.%c,trace.%c
xdebug.var_display_max_children,128,128
xdebug.var_display_max_data,512,512
xdebug.var_display_max_depth,3,3
編集
スクリーンショットのアルバムを作成しました。
1つ目は、Eclipseからのエラーメッセージで、一晩中放置すると発生します。
残りのスクリーンショットは、phpinfo出力の順序(上から下)の断片です。
これらの変数はありますが、phpinfo()出力にZendセクションはありません
report_zend_debug = on
zend.detect_unicode On
zend.enable_gc On
zend.multibyte Off
zend.script_encoding = no value
あなたの説明から、それは次のようです:
私の仮定では、ローカルコードとサーバーコード間のファイルマッピングが機能していません。より正確には、Eclipseはファイルをサーバーのファイルにマップできません。
これを解決するには、Eclipseプロジェクト内でパスマッピング設定を設定する必要があります `srun/debug settings。
移動:
以下の手順に従うと、うまくいくはずです
最新のXDebugバージョン
XDebugのバージョンは2015年のものです https://xdebug.org/ 。したがって、最新バージョンにアップグレードする必要があります
XDebug構成のセットアップ
システムに存在するものに応じて、99-xdebug.ini
または/usr/local/etc/php/conf.d/
または/etc/php/conf.d
に/etc/php/5.6/cli/conf.d
を設定します
xdebug.remote_enable=1
xdebug.remote_Host=127.0.0.1
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
SSHデバッグトンネルを作成します
デバッグするマシンから、を使用してSSHトンネルを開始する必要があります
ssh -R 127.0.0.1:9000:127.0.0.1:9000 -p 22 <user>@<phpserver>
Eclipseでリモートパスマッピングを構成します
ポート9000とリモートパスでのデバッグ用にEclipseを構成すると、動作するはずです。
Opcache、zendオプティマイザーなど、解釈phpコードで機能するすべての拡張機能を無効にしてみてください。運が良ければ、xdebug.soが他のすべてのモジュールの後で最後にロードされるようにして、それらを再度有効にできるようにします。 xdebug.soを他のすべてのphp.soが存在するフォルダーに配置し、xdebug.soへのフルパスを使用してphpiniの最後の行にロードします。
最後の行php.iniに配置するだけで、/ etc/php/5.6/Apache2/conf.d/*の設定を使用して、互換性のないモジュールがロードされる可能性があります。したがって、設定をしばらくの間どこかに移動するだけです。
リンクの投稿の下部で、無効(ですが、apt)opchacheモジュールを完全に削除せず、デバッガーの1行前のphp.iniに配置します。
私が覚えているように、拡張機能がphpinfo()出力にどのようにロードされたかを確認してください。zendロゴの左側にあります。デバッガーは、その出力ブロックの最後の行である必要があります。 phpinfo();を投稿してください出力。
別の方法、私が自分で歩くもの:(そして私はそれをお勧めします)
リモートサーバーへのルートアクセス権がある場合は、ZendDebuggerを試してください。 Zend Studio(無料ではありません)にバンドルされていますが、しかし一部のphpバージョンにはデバッガーの個別のダウンロードがあります。5.6は利用可能な最新バージョンです。彼らはそれをphp7用に公開していませんが、とにかく試用版のZendスタジオからコピーできるかどうかはわかりません。削除されてダウンロードできない場合は、お送りします。
Zendデバッガーは現在phpにネイティブであり、ZendチームはEclipse PDT開発に関与しています(ただし、有料版で最も上品な機能を実現しました)
私はあなたと同じような環境を持っていますが、XDebugにも問題があり、それを削除してZendデバッガーを試すことにしました。 askubuntuのインストールと問題の修正について、私の質問と回答があります: https://askubuntu.com/questions/1002252/installing-configuring-zend-debugger-for-Eclipse-pdt
一言で言えば、解決策は次のとおりです。
Configでコメントアウトします:(cliバージョンも無効になっているのでシンボリックリンクのようです)
lenya@JabbaDesktop:~$ Sudo nano /etc/php/5.6/Apache2/conf.d/10-opcache.ini
; configuration for php opcache module
; priority=10
; zend_extension=opcache.so
/etc/php/5.6/Apache2/php.iniの下部:
[Zend]
zend_extension="/usr/lib/php/20131226/opcache.so"
zend_extension="/usr/lib/php/20131226/ZendDebugger.so"
zend_debugger.allow_hosts=127.0.0.0/8,192.168.0.0/16
zend_debugger.expose_remotely=1
zend_debugger.connector_port=10137
最初の2行(.so)は正確にこの順序である必要があります。 デバッガーのインストール「ハウツー」はグーグルで簡単に見つけることができます。上記の問題については誰も言及していません。
更新:
デバッガーを使用すると、index.phpに移動します。しばらくステップスルーして、変数の値を確認できます。
これは、すでにサーバーに接続していることを意味します。問題はありません。
私はEclipseと "Synchronized PHPProjectを使用してリモートPHP開発を行っています。Eclipse以外はコンピューターで実行されていません。
これがあなたの問題です。 xDebug接続を許可する必要があります。 xDebug(PHP Webサーバー)が接続しようとしていますが、おそらくどこにいるかわかりません;)
2つのオプションがあります:
NATの背後にいない場合、またはテストサーバーと同じネットワーク内にいない場合は、PCでポート9000を開く必要があります。 NATの背後にいる場合は、転送ポート9000も必要です(これはデフォルトであり、変更できます)。次に、正しい"xdebug.remote_Host=your_public_ip"
またはxdebug.remote_connect_back = on
を設定します。任意のホストからのリモートセッション(JIT)の受け入れを有効にすることもできます([設定]-> PHP-> [デバッグ]-> [デバッガー]-> [xDebug])。この後、ブラウザー拡張機能を介してデバッガーを簡単に実行できるようになります。 xDebugヘルパーのように。
SSHトンネルを介してデバッグするようにデバッガーの起動構成(「デバッグ」アイコンの後の小さな矢印)を構成します。この場合、xdebug.remote_Host=127.0.0.1
が正しくなります。注:sshサーバーホストはサーバードメインと同じである必要があります。 SSHサーバーはポート22で使用可能である必要があります