2017-10-18 12 views
0

サーバー上で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行で停止し、その時点からブレークポイントを設定してそれらに進むことができます。しかし、同じファイルにブレークポイントを設定した場合、stopOnEntryfalseに設定してブラウザにロードすると、ブレークポイントにヒットしません。私はここで何が欠けていますか?

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:にマップされます。

localSourceRootserverSourceRootのように私は思ったように動作しません見える...

EDIT3:私はmyprojectlocalSourceRootを変更すると、ログにエントリがまだfile:///home/seva/y:/admin_main.phpを持っています。私はVSコードで編集しているフォルダを除いて、Y:\がどこから来るのかわかりません。したがって、これらの設定と現在のフォルダパスの間には、面白い相互作用があります。

EDIT4:私の考えは、の下にあるhttps://github.com/felixfbecker/vscode-php-debug/blob/5bfc474d681d5500d7b31d27bccdbfc08b88884e/src/paths.tsの機能です。それは正しく見える - ローカルの相対パスを取る、サーバーのルートに適用、サーバーのパスを取得します。

だけ私はそれをステップ実行することができれば...

+0

どのようなラインのもので?複数行のステートメントの場合、実際の行は真ん中にあるので、単純な/単一の行のステートメントにのみブレークポイントを設定することをお勧めします。 VSCがどのように正確に動作するかは分かりませんが(PhpStormユーザーはここにあります)、多分それは何とかパスマッピングに関係していますか?ちょっと思い出してください - xdebug(あるいはおそらくPHP自体)は最終的な/解決されたパスを使用しますが、IDE /エディタはそのままパスを使用するべきです。だから、リモート側にシンボリックリンクやそのようなものがあれば、それをアカウントに入れるほうがいい。 'xdebug_break();'を実際のコードブレークに置くことは、そのオプション= 'false'で必要になるでしょうか? – LazyOne

+0

xdebugログには、どちらの場合でもブレークポイントが当てはまる「真」および「偽」セッションのログが表示されます。今では、単純な行だけではなく、新しい行の各命令を使って新しい単純なスクリプトを作成し、そこでの動作を確認することをお勧めします。 '<?php $ a = 5;のようなものです。 $ b = 3; $ c = $ a + $ b; echo $ c; ' – LazyOne

答えて

関連する問題