web-dev-qa-db-ja.com

PHPデバッガーはブレークポイントで停止しません:EclipseとXdebug


クライアントサイドツール:(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出力の順序(上から下)の断片です。

https://imgur.com/a/9DKev

これらの変数はありますが、phpinfo()出力にZendセクションはありません

report_zend_debug = on
zend.detect_unicode On
zend.enable_gc  On
zend.multibyte  Off 
zend.script_encoding = no value
10
Steve

あなたの説明から、それは次のようです:

  • リモートサーバーへのデバッグ接続が機能している
  • ブレークポイントはindex.phpで機能しますが、他の場所では機能しません

私の仮定では、ローカルコードとサーバーコード間のファイルマッピングが機能していません。より正確には、Eclipseはファイルをサーバーのファイルにマップできません。

これを解決するには、Eclipseプロジェクト内でパスマッピング設定を設定する必要があります `srun/debug settings

移動:

  1. メニューからプロジェクト->プロパティ
  2. [実行/デバッグ設定]を選択します
  3. 起動構成設定を編集します
  4. [サーバー]タブのセクションPHPサーバーで、configureを選択します
  5. 「PHPサーバー」ウィンドウが開き、パスマッピングタブを選択します
  6. サーバー上のパスをサーバー上のプロジェクトのパスに設定し、ローカルパスを設定します-)これは自明です。

enter image description here

7
Jannes Botis

以下の手順に従うと、うまくいくはずです

最新の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を構成すると、動作するはずです。

4
Tarun Lalwani

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に移動します。しばらくステップスルーして、変数の値を確認できます。

これは、すでにサーバーに接続していることを意味します。問題はありません。

0
LeonidMew

私はEclipseと "Synchronized PHPProjectを使用してリモートPHP開発を行っています。Eclipse以外はコンピューターで実行されていません。

これがあなたの問題です。 xDebug接続を許可する必要があります。 xDebug(PHP Webサーバー)が接続しようとしていますが、おそらくどこにいるかわかりません;)

2つのオプションがあります:

  1. NATの背後にいない場合、またはテストサーバーと同じネットワーク内にいない場合は、PCでポート9000を開く必要があります。 NATの背後にいる場合は、転送ポート9000も必要です(これはデフォルトであり、変更できます)。次に、正しい"xdebug.remote_Host=your_public_ip"またはxdebug.remote_connect_back = onを設定します。任意のホストからのリモートセッション(JIT)の受け入れを有効にすることもできます([設定]-> PHP-> [デバッグ]-> [デバッガー]-> [xDebug])。この後、ブラウザー拡張機能を介してデバッガーを簡単に実行できるようになります。 xDebugヘルパーのように。

  2. SSHトンネルを介してデバッグするようにデバッガーの起動構成(「デバッグ」アイコンの後の小さな矢印)を構成します。この場合、xdebug.remote_Host=127.0.0.1が正しくなります。注:sshサーバーホストはサーバードメインと同じである必要があります。 SSHサーバーはポート22で使用可能である必要があります

0
zulus