サーバー上でVisual Studio CodeおよびXDebugを使用してPHPをデバッグします。サーバー側の設定は行く:VSCodeサーバーのローカルデバッグ拡張パスの翻訳
zend_extension=xdebug.so
xdebug.remote_enable=true
xdebug.remote_host=mybox
xdebug.remote_port=9000
xdebug.remote_log=/tmp/xdebug/xdebug-remote.log
xdebug.remote_autostart=1
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir=/tmp/xdebug
launch.jsonでの構成が行く:
今{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"localSourceRoot": "Y:\\",
"serverSourceRoot": "/home/seva/myproject",
"stopOnEntry":true
}
、設定は次のようである、と私は、ブラウザでそのプロジェクトからページを持ち出すときデバッガは最初のPHP行で停止し、その時点からブレークポイントを設定してそれらに進むことができます。しかし、同じファイルにブレークポイントを設定した場合、stopOnEntry
をfalse
に設定してブラウザにロードすると、ブレークポイントにヒットしません。私はここで何が欠けていますか?
EDIT:非常に単純なコード、1行のステートメント、そこにシンボリックリンクはありません。パスマッピングはVSコードに与えられます。
EDIT2は:file:///home/seva/y:/admin_main.php
:ブレークポイントオブジェクト上のファイル名
<- breakpoint_list -i 5
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_list"
transaction_id="5">
<breakpoint type="line"
filename="file:///home/seva/y:/admin_main.php"
lineno="5" state="enabled" hit_count="0" hit_value="0" id="274990011">
</breakpoint>
<breakpoint type="line"
filename="file:///home/seva/y:/db.php"
lineno="770" state="enabled" hit_count="0" hit_value="0" id="274990010">
</breakpoint>
</response>
注:ログに面白いの行を見つけました。ローカルパスとサーバーパスの奇妙なマッシュアップです。ファイルは実際にサーバーボックスの/home/seva/myproject
にあり、SAMBA経由で\\servername\myproject
として共有され、ローカルドライブY:にマップされます。
はlocalSourceRoot
とserverSourceRoot
のように私は思ったように動作しません見える...
EDIT3:私はmyproject
にlocalSourceRoot
を変更すると、ログにエントリがまだfile:///home/seva/y:/admin_main.php
を持っています。私はVSコードで編集しているフォルダを除いて、Y:\がどこから来るのかわかりません。したがって、これらの設定と現在のフォルダパスの間には、面白い相互作用があります。
EDIT4:私の考えは、の下にあるhttps://github.com/felixfbecker/vscode-php-debug/blob/5bfc474d681d5500d7b31d27bccdbfc08b88884e/src/paths.tsの機能です。それは正しく見える - ローカルの相対パスを取る、サーバーのルートに適用、サーバーのパスを取得します。
だけ私はそれをステップ実行することができれば...
どのようなラインのもので?複数行のステートメントの場合、実際の行は真ん中にあるので、単純な/単一の行のステートメントにのみブレークポイントを設定することをお勧めします。 VSCがどのように正確に動作するかは分かりませんが(PhpStormユーザーはここにあります)、多分それは何とかパスマッピングに関係していますか?ちょっと思い出してください - xdebug(あるいはおそらくPHP自体)は最終的な/解決されたパスを使用しますが、IDE /エディタはそのままパスを使用するべきです。だから、リモート側にシンボリックリンクやそのようなものがあれば、それをアカウントに入れるほうがいい。 'xdebug_break();'を実際のコードブレークに置くことは、そのオプション= 'false'で必要になるでしょうか? – LazyOne
xdebugログには、どちらの場合でもブレークポイントが当てはまる「真」および「偽」セッションのログが表示されます。今では、単純な行だけではなく、新しい行の各命令を使って新しい単純なスクリプトを作成し、そこでの動作を確認することをお勧めします。 '<?php $ a = 5;のようなものです。 $ b = 3; $ c = $ a + $ b; echo $ c; ' – LazyOne