96

テキストエディタまたはIDEをインストールせずに、xdebugが機能しているかどうか、つまりphpコードをデバッグできるかどうかをテストすることは可能ですか?

xdebugがphpinfo()に表示されるのは、次の部分だけです。

解析された追加の.iniファイル/etc/php5/apache2/conf.d/mysql.ini、/etc/php5/apache2/conf.d/mysqli.ini、/etc/php5/apache2/conf.d/pdo.ini、 /etc/php5/apache2/conf.d/pdo_mysql.ini、/etc/php5/apache2/conf.d/xdebug.ini

phpinfo()には他のどこにも記載されていません。

4

12 に答える 12

103

実際にデバッグを行わないと、デバッガーが動作していることを確認できないと思います。

しかし、あなたはかなり確信で​​きます.xDebugのいくつかの側面が機能している場合、それはすべて機能していると想定する必要があると思います.

その場合、次のことを試すことで、xDebug がインストールされ、適切に配置されていることを確認できます。

1) phpinfo()-- xDebug を含む、ロードされているすべての拡張機能が表示されます。そこにある場合は、それが機能していることは間違いありません。

2) それが十分でない場合は、var_dump()関数を使用してみてください。xDebug は の出力を変更しvar_dump()て、追加情報を含めます。これが整っていれば、xDebug は機能しています。

3) xDebug は、PHP のエラー出力を変更します。xDebug を使用してプログラムがクラッシュした場合、標準の PHP クラッシュ出力よりも多くの情報が得られます。

4) xDebug は、PHP に多くのヘルパー関数も追加します。これらのいずれかを試して、機能しているかどうかを確認できます。たとえば、関数xdebug_get_code_coverage()が存在し、配列を返す必要があります。存在する場合は、xDebug がインストールされています。そうでない場合は、そうではありません。

于 2012-12-26T21:41:30.260 に答える
74

走る

php -m -c

ターミナルで を探します[Zend Modules]。ロードされている場合は、どこかにあるはずです。

注意

Ubuntu を使用している場合は、 からにxdebug設定を追加する必要があるため、ここに表示されない場合があります。/etc/php5/apache2/php.ini/etc/php5/cli/php.ini

私のXdebug設定:

Xdebug 3 (およびそれ以降) の場合

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.mode=debug
xdebug.client_host=localhost
;# The default is 9003
xdebug.client_port=9000

Xdebug 2.9 (またはそれ以下)の場合

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
于 2014-03-27T20:10:45.377 に答える
42

xDebug does exists.次のようにしてみてください。またはが返されますxDebug doesn't exists.

<?=sprintf('xDebug does%s exists.', extension_loaded('xdebug') ? '' : "n't");

CLI で:

php -r "printf('xDebug does%s exists.' . PHP_EOL, 
extension_loaded('xdebug') ? '' : 'n\'t');"
于 2015-10-01T22:59:50.997 に答える
29

xdebug を Netbeans 8.0.2 で動作させるために、ほぼ 24 時間の苦い作業を行った後、すべての Ubuntu および Ubuntu 関連のスタックで動作する解決策を見つけました。

問題番号 1: PHP と xdebug のバージョンは互換性がなければならない

Linux セットアップを実行し、apt-get を使用して xdebug をインストールすると、適切な xdebug バージョンが取得されないことがあります。私の場合、最新のphpバージョンがありましたが、古いxdebugバージョンがありました。それは、私の現在の Xubuntu のバージョンが原因であるに違いありません。ソフトウェア バージョンは、実行している OS バージョンに依存するリポジトリに依存します。

解決策: PHP には、PECL と呼ばれる優れた拡張機能マネージャーがあります。ここに記載されている手順に従って、起動して実行してください。まず、メンバーがコメントで指摘したように、PECL を機能させるには、PHP の開発者パッケージをインストールする必要があります。

sudo apt-get install php5-dev

次に、PECL を使用して、xdebug の最新の安定バージョンをインストールできます。

sudo pecl install php5-xdebug

これを行うと、適切なバージョンの xdebug がインストールされますが、使用する準備はできていません。その後、有効にする必要があります。その方法について多くの提案を見てきましたが、問題は、PHP がクライアントとサーバー (この場合は Apache) の両方に対して有効にするためにいくつかのモジュールを必要とすることです。ここでのベスト プラクティスは、php5enmod と呼ばれるモジュールを有効にする組み込みの方法を使用することです。使用法はここに記載されています。

問題番号 2: モジュールを正しく有効にする

まず、/etc/php5 フォルダーに移動する必要があります。そこには、apache2、cli、および mods_available の 3 つのフォルダーがあります。mods_available フォルダーには、特定のモジュールをアクティブにするための指示が記載されたテキスト ファイルが含まれています。命名規則は [module].ini です。それらのいくつかの内部を見て、それらがどのように設定されているかを確認してください。

次に、mods_available フォルダー内に ini ファイルを作成する必要があります。xdebug.ini という名前のファイルを作成し、ファイル内に次を貼り付けます。

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

上記の例とまったく同じように、ディレクティブ[xdebug]が存在することを確認してください。モジュールが機能することが不可欠です。実際、コード全体をコピーして貼り付けるだけで、より幸せになれます。:D

注: zend_extension パスは非常に重要です。この例では、PHP エンジンの現在のバージョンを指していますが、最初に /usr/lib/php5 に移動し、数字で名前が付けられたフォルダーが正しいものであることを確認する必要があります。そこに表示されている名前に合わせて名前を調整し、その間にフォルダー内をチェックして、 xdebug.so が本当にそこにあることを確認します。あなたがすべてを正しくやったなら、そうあるべきです。

xdebug.ini が作成されたので、モジュールを有効にします。これを行うには、コンソールを開いて次のように入力します。

php5enmod xdebug

すべてがうまくいった場合、PHP はこのファイルへの 2 つのリンクを作成しました。1 つは /etc/php5/apache2/conf.d 内、もう 1 つは /etc/php5/cli/conf.d 内です

Apache サーバーを再起動し、コンソールに次のように入力します。

php -v

次のようなものを取得する必要があります。

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

これは、PHP クライアントが xdebug.ini ファイルを読み取り、xdebug.so モジュールをロードしたことを意味します。ここまでは順調ですね。

Web サーバーのどこかに phpinfo スクリプトを作成し、実行します。すべてがうまくいった場合は、次のように表示されます。

ここに画像の説明を入力

これが表示された場合、Apache もモジュールをロードしており、おそらく準備ができています。それでは、Netbeans が正しくデバッグされるかどうか見てみましょう。非常に単純なスクリプトを作成し、いくつかの変数を追加して値を指定し、それらにブレーク ポイントを設定します。ここで CTRL+F5 を押して、デバッガー パネルの [ステップ イン] をクリックし、次のような結果になるかどうかを確認します。

xdebug の動作

tools/options/php の下で、デバッグ用の Netbeans 構成を確認することを忘れないでください。次のようになります。

Netbeans での構成のデバッグ

これが、このやや曖昧で紛らわしい問題に光を当てることを願っています。

幸運をお祈りしています!

于 2015-03-08T12:40:58.150 に答える
3

Eclipseを使用している場合は、XDebug モードで実行している間、魔法の定数 __FILE__ が常に次のように評価されることに注意してください。

xdebug://debug-eval

したがって、セッションが XDebug の下にある場合、次のチェックはtrueを返します。

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
于 2015-05-17T17:47:32.327 に答える
2

あなたの質問では、あなたの phpinfo は、Apache が xdebug の構成を /etc/php5/apache2/conf.d/xdebug.ini にロードしていると述べていると述べました。 .ini (そしてそれが私がしたことです) ただし、構成が /etc/php5/apache2/conf.d/xdebug.ini に設定されている場合は、[XDebug] 構成設定を /etc/php5/apache2 から削除する必要があります。 /php.ini を /etc/php5/apache2/conf.d/xdebug.ini INSTEAD に入れます。/etc/php5/apache2/php.ini から削除し、代わりに /etc/php5/apache2/conf.d/xdebug.ini を入れて、apache を再起動すると、うまくいきました!!

したがって、/etc/php5/apache2/conf.d/xdebug.ini に次のように記述します。

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

/etc/php5/apache2/php.ini からも削除します。

次に、次のようにします。

sudo サービス apache2 再起動

それならうまくいくはずです!!!

于 2015-02-13T06:10:57.693 に答える