web-dev-qa-db-ja.com

xdebugが機能しているかどうかを確認します

テキストエディタまたは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()のどこにも記載されていません。

69
oshirowanen

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

しかし、あなたはかなり確信することができます-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がインストールされます。そうでない場合、そうではありません。

77
Spudley

走る

php -m -c

端末で[Zend Modules]を探します。ロードされていれば、どこかにあるはずです!

NB

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

[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
55
Luke Madhanga

次のように試してください。「exists」または「non exists」が返されます。

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
25
KsaR

XdebugをNetbeans 8.0.2で動作させようとして24時間近く苦労した後、UbuntuおよびUbuntu関連のすべてのスタックで動作するソリューションを見つけました。

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

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

解決策:PHPにはPECLと呼ばれるきちんとした拡張マネージャーがあります。 here の指示に従って、実行してください。まず、コメントでメンバーが指摘したように、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フォルダーには、特定のモジュールをアクティブにするための指示を含むテキストファイルが含まれています。名前の規則は[モジュール] .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スクリプトを作成して実行します。すべてがうまくいった場合、これはあなたが見るべきものです:

enter image description here

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

xdebug in action

Tools/options/phpで、デバッグ用のNetbeans設定を必ず確認してください。次のようになります。

Debugging configurations on Netbeans

これが、このあいまいで混乱を招く問題に光を当てることを願っています。

ご多幸を祈る!

22

この小さなphpコードを実行できます

<?php
phpinfo();
?>

出力ページ全体をコピーして、この link に貼り付けます。次に分析します。 Xdebugがインストールされているかどうかが表示されます。また、インストールを完了するための指示が表示されます。

4
cmb28

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

xdebug://debug-eval

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

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
2

KsaR answerを拡張し、コマンドラインからxdebugをチェックする可能性を提供するだけです:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"
1
goulashsoup

あなたの質問では、Apacheがxdebugの構成を/etc/php5/Apache2/conf.d/xdebug.iniに読み込んでいるとphpinfoが述べていると述べました。オンラインでの指示の多くで、xdebug configをphp .ini(およびそれは私がやったことです)ただし、構成が/etc/php5/Apache2/conf.d/xdebug.iniに設定されている場合、/ etc/php5/Apache2から[XDebug]構成設定を削除する必要があります/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の再起動

その後、動作するはずです!!!

1
Paul Preibisch