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


86

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


7
phpinfo()ロードされた拡張機能として報告?それはあなたが「働く」という意味ですか?
Wiseguy

2
phpinfo()に表示されている場合は、Xdebugsポート(デフォルトでは9000)でtelnetを試すことができます
tix3 2012

@Wiseguy、質問を更新しました。それは正しくロード/動作していることを意味しますか?
oshirowanen 2012

@ tix3、質問を更新しました。それは正しくロード/動作していることを意味しますか?
oshirowanen 2012

2
拡張機能が実際にロードされる場合は、構成ディレクティブをリストする独自のセクションが必要です。
ワイズガイ2012

回答:


94

実際にいくつかのデバッグを行うことがなければ、私はあなたがすることはできません推測し、特定のデバッガが動作していること。

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


1
phpinfo()は、でxdebugについてのみ言及していますAdditional .ini files parsed。残りの提案を今すぐ確認してください。
oshirowanen 2012

3
試したところxdebug_get_code_coverage()、取得しましたFatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5
oshirowanen 2012

7
けっこうだ。これは、xdebugが正しくインストールされていないことをかなり決定的に示しています。
Spudley 2012

3
その場合は参考までに、/etc/php/conf.d/xdebug.ini解析された追加の.iniファイルに記載されているファイルを開いて、その中のすべての行のコメントを解除する必要があります。 zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
トニーモレロ2016年

@TonyMorello php.iniがフルパスで正しくセットアップされていたので、それは私を助けたと思いますが、Debianには/mods-availableディレクトリもあり、xdebug.ini設定がphp.ini設定と競合していました(私は思います)。
PJBrunet19年

67

実行

php -m -c

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

NB

Ubuntuを使用している場合は、からxdebugの設定を追加する必要があるため、それがここに表示されないことがあり/etc/php5/apache2/php.ini/etc/php5/cli/php.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

17
php --versionロードされている場合はXdebugにもリストされます
mfink 2016年

1
@mfink php --versionは私には機能しません。マシンを起動した直後、Apacheが起動して動作した後、php --versionXdebugがphpinfo()表示されますが、xdebugセクションは表示されません。また、PHPスクリプトの実行はブレークポイントで停止しません。を実行するservice apache2 restartphpinfo()、xdebugセクションが表示され、デバッグが機能します。そのため、何らかの理由で、マシンの起動中にApacheが起動したときにxdebugがロードされていません。そのため、今のところ、起動するたびにApacheを再起動する必要があります。
バトルブトクス

37

次のようにしてみてください。「存在する」または「存在しない」を返す必要があります。

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

25

xdebugをNetbeans8.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での構成のデバッグ

これが、このかなりあいまいで紛らわしい問題に光を当てることを願っています。

ご多幸を祈る!


2
私のために働いた、この答えはおそらくxdebugまたはnetbeansサイトにあるはずです
サウザートン2015年

1
PECLを機能させるには、PHPの開発者パッケージをインストールする必要がありました sudo apt-get install php5-dev
2015年

また、php5enmodiniファイルにリンクを作成しません。リンクがなくても問題なく動作します。
2015年

1
もう1つ:[xdebug]iniファイルのディレクティブは、それを機能させるために重要です。元のiniファイルに[xdebug]が欠落しているという事実に混乱しましたが、私にとってはそれなしでは機能しませんでした。
2015年

こんにちは!あなたはPHPの開発者パッケージをインストールすることについて正しいです、私はそれに応じて投稿を更新します。php5enmod汝に対するあなたのコメントについてはよくわかりません。指定したフォルダにリンクを作成します。はい、[xdebug]ディレクティブは必須です。それを反映するように投稿を更新します。フィードバックをお寄せいただきありがとうございます!
テオ・T.カランサ

10

延長するだけ KsaRの回答、コマンドラインからxdebugをチェックする可能性を提供するです。

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

6

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

<?php
phpinfo();
?>

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


3

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

xdebug://debug-eval

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

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

2

あなたの質問であなたはあなたのphpinfoがapacheがxdebugの設定を/etc/php5/apache2/conf.d/xdebug.iniにロードしていると述べていると述べましたオンラインの多くの指示であなたは彼らがphpにxdebug設定を置くようにあなたに頼むことに気付くかもしれません.ini(そしてそれが私がしたことです)ただし、構成が/etc/php5/apache2/conf.d/xdebug.iniに設定されている場合は、[XDebug]構成設定を/ etc / php5 / apache2から削除する必要があります。 /php.iniを作成し、/ etc / php5 / apache2 / conf.d / xdebug.iniINSTEADに配置します。/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 service apache2 restart

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


0

xdebug 3以降、次のコマンドラインを使用できます。

php -r "xdebug_info();"

また、xdebugのインストールに関する有用な情報が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.