2017-10-18 135 views
0

PHP的調試與Visual Studio代碼和Xdebug。服務器端配置雲:VSCode PHP調試擴展路徑轉換,本地服務器上的服務器

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,並在瀏覽器中加載它,斷點未命中。我在這裏錯過了什麼?

編輯:非常簡單的代碼,一行語句,沒有符號鏈接存在,路徑映射是給VS代碼。

EDIT2:發現在日誌中一個有趣的線:

<- 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> 

注意斷點對象的文件名:file:///home/seva/y:/admin_main.php。這是一個奇怪的本地路徑和服務器路徑混搭。該文件確實坐在/home/seva/myproject在服務器中,這是在SAMBA共享的\\servername\myproject,然後映射到本地驅動器ÿ:.

貌似localSourceRootserverSourceRoot不工作我以爲的方式......

EDIT3:當我改變localSourceRootmyproject,在日誌中的條目仍具有file:///home/seva/y:/admin_main.php。我沒有看到Y:\從哪裏來,除了它是我在VS代碼中編輯的文件夾。所以這些設置和當前文件夾路徑之間會有一些有趣的相互作用。

EDIT4:我認爲罪魁禍首是https://github.com/felixfbecker/vscode-php-debug/blob/5bfc474d681d5500d7b31d27bccdbfc08b88884e/src/paths.ts下的功能convertClientPathToDebugger()。它看起來是正確的 - 採取本地相對路徑,適用於服務器根,獲得服務器路徑。

如果我只能通過...

+0

這些都是什麼樣的線路?對於多行語句來說,實際的行在中間的某個地方..所以最好只在簡單/單行語句中設置斷點。不知道VSC究竟是如何工作的(PhpStorm用戶在這裏),但也許它與路徑映射有某種關係?提醒一下 - xdebug(或可能是PHP本身)將使用最終/解析路徑,而IDE /編輯器應該按原樣使用路徑。所以如果你有遠程方面的象徵性鏈接或類似的東西,最好把它帶入一個帳戶。將實際代碼中的'xdebug_break();'放在需要時使用該選項=「false」? – LazyOne

+0

會很好看Xdebug的日誌,其中斷點被擊中在這兩種情況下「真」與「假」的會議。現在我會建議創建一個新的簡單腳本,其中包含幾條簡單的線條,每條新指令都在新行中,並查看它在那裏的行爲。像'<?php $ a = 5; $ b = 3; $ c = $ a + $ b; echo $ c;' – LazyOne

回答