13

私はかなり絶望的で、アイデアが不足しています:

Laravel 3 プロジェクト用に xdebug と PhpStorm を構成しました。プロジェクトを Mac OS X Apache でローカルに実行するため、PhpStorm と Web アプリケーションは同じマシンで実行されます。localhost.lt が Laravel の public ディレクトリを指すように仮想ホストを構成しました。

関連する php.ini の xdebug エントリ:

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
[xdebug]
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.profiler_enable=1
xdebug.remote_log=/var/log/xdebug_remote.log
xdebug.remote_connect_back=1

拡張機能が読み込まれることを確認しました。

何もシンボリックリンクされておらず、Web サーバー上のフォルダーと PhpStorm のフォルダーがまったく同じであるため (Web サーバーが同じマシン上にあるため)、パス マッピングなしで PHP Web アプリケーションのデバッグ/実行構成をセットアップします。

IDE から「デバッグ」を介して起動すると、xdebug_remote.log は、アプリケーション/ライブラリ内のファイルの 1 つに設定したブレークポイントを正しく示します。

<- breakpoint_set -i 5 -t line -f
file:///Users/RalfR/src/livetime/application/libraries/LiveTime.php -n 676
->
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="9230016"></response>

ただし、LiveTime.php ライブラリから関数を呼び出すリンクをクリックすると、ブレークポイントにヒットしません。ログには次のように表示されます。

<- stack_get -i 6 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stack_get" transaction_id="6"><stack where="{main}" level="0" type="file" filename="file:///Users/RalfR/src/livetime/public/index.php" lineno="14"></stack></response>

<- run -i 7 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="7" status="stopping" reason="ok"></response>

<- run -i 8
Log closed at 2013-04-22 21:03:57

多くのフレームワークと同様に、Laravel は .htaccess mod_rewrite を使用してすべてを public/index.php にパイプします。LiveTime.php スクリプトが実行されないことが xdebug に表示されるため、これが PhpStorm / xdebug が application/libraries/LiveTime.php のブレークポイントをキャッチしない原因でしょうか?

もしそうなら、どうすればこの問題を解決できますか?

4

3 に答える 3

9

パス マッピングを設定する必要があります。ファイルごとに設定する必要はありません。私の問題を解決するために、IntelliJ (PHPStorm と同じ) の [設定] > [PHP] > [サーバー] に移動し、サーバーを選択して次のように設定しました (以下の注 2 を参照):

ここに画像の説明を入力

注 1: プロジェクトへのパスを直接設定することもできました。 root ですが、Laravel の "public" フォルダーとアプリケーション以外のデバッグには興味がないので、これら 2 つのフォルダーのパスのみを設定します。この後、すべてが完璧に機能しました。

注 2:上記の画像は、上記の手順で参照した [設定] ダイアログからのものではなく、同じように機能する同じマップ マッピング ウィジェットを表示する [パス マッピングの問題の解決] ダイアログからのものです。どちらの場所でも設定を修正すると機能します。最初にサーバーのデバッグ設定がなく、IDE がマッピングの問題を検出すると、[パス マッピングの問題の解決] ダイアログが表示され、その時点でサーバー設定も作成されます。

于 2013-10-31T22:42:18.130 に答える
0

私の場合、 " breakpoint_set" / " command is not available" 問題の原因は無効xdebug.extended_infoなオプションでした (デフォルトで有効になっていますが、プロファイリングのために無効にしました)。
ブレークポイントが機能せず、xdebug.extended_info無効になっています。
再度有効にした後、ブレークポイントが機能しましたxdebug.extended_info

于 2015-08-03T11:10:36.810 に答える