![](/img/trans.png)
[英]Xdebug not stepping at breakpoints in VSCode, MAMP and Xdebug
[英]Docker and XDebug not reading breakpoints VSCode
在過去的 6 個月中,我一直在使用對 Docker 容器進行遠程調試的 MAC 上使用 XDebug 和 PHP 版本 7.0.*。
我正在運行舊版本的docker,它使用VirtualBox to VM for docker,一切正常。
我最近將 docker 更新到了 17.03.1 版本,除了 xDebug 問題之外什么都沒有。 我已經通過他的存儲庫上的一個問題聯系了 vscode-php-debug 的創建者,然后他指出我用 xdebug 和/或 docker 來解決這個問題。
我的問題如下:
XDebug 正在我的容器上運行和工作,xdebug 日志顯示它連接到我的 IDE,但是當我在 VSCode 中設置斷點時,它只是關閉連接,就好像沒有斷點一樣。
我在 vscode-php-debug 上發布的問題可以在這里找到
其中有我的 xDebug 日志和 VSCode 調試日志的副本...它顯示連接已建立,但沒有命中斷點。
我已經閱讀了一些博客,說 docker 現在需要為與 xdebug 的連接創建一個環回 ip 才能工作,我也嘗試過但失敗了。
在使用了這么長時間之后,我發現沒有調試器很難進行調試。
我嘗試了許多配置,重新安裝,重新啟動,重建圖像/容器,甚至在 freenode 上嘗試了 docker 和 xdebug irc 通道,但沒有任何成功。
EDIT-2 2018
現在可以更改remote_host
值以支持所有平台:
xdebug.remote_host = "host.docker.internal"
EDIT-1 2018不再需要使用 plist 修復程序。 正如本要點中所指出的: https : //gist.github.com/chadrien/c90927ec2d160ffea9c4#gistcomment-2398281您現在可以使用 docker for mac 內部 IP。
[xdebug]
xdebug.remote_host = "docker.for.mac.host.internal"
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_port = 9000
xdebug.idekey="PHPSTORM"
舊配置
由於您在 Mac 上使用 docker,因此我發布了我的解決方案的工作方式。 大部分功勞都歸於 docker 論壇上的這篇文章。
假設您的 xdebug 安裝正確,這是我在php.ini
配置。
[xdebug]
xdebug.remote_host=10.254.254.254
xdebug.remote_autostart=1
xdebug.idekey = PHPSTORM
xdebug.default_enable = 0
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.profiler_enable = 1
您可以通過在終端中執行此命令來測試您的配置。 sudo ifconfig en0 alias 10.254.254.254 255.255.255.0
。
如果這有效,您可以將其轉換為plist
文件並將其放置在以下位置。 /Library/LaunchDaemons/com.docker.xdebugFix.plist
。 您將在下面找到我的 plist 文件版本。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.docker.xdebugFix</string>
<key>ProgramArguments</key>
<array>
<string>ifconfig</string>
<string>en0</string>
<string>alias</string>
<string>10.254.254.254</string>
<string>255.255.255.0</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
注意:plist 僅在您的 Mac 重新啟動后才能工作。
PHPSTORM 配置(2018 年編輯后也需要)
在那之后,我的斷點在哪里工作,如果你使用的是 chrome,你還需要使用 xdebug 擴展,但我很確定你知道這一點,因為你過去使用過它。
檢查您的 docker-compose.yml
我有一個環境變量:
XDEBUG_CONFIG: remote_host=${LAN_IP}
需要改為:
XDEBUG_CONFIG: client_host=${LAN_IP}
其中 LAN_IP 定義為 .env 文件中的本地 LAN IP
我正在使用VSCODE devcontainer
並使用以下配置:
我的 VSCODE 的 launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
我在下面使用帶有 RUN 的Dockerfile
來安裝 xdebug:
RUN pecl install xdebug && docker-php-ext-enable xdebug
我在/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
找到我的 xdebug 配置文件
我編輯文件如下:
zend_extension=xdebug
[xdebug]
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.idekey=VSCODE
或者您可以將其添加到 Dockfile 中,如下所示:
RUN echo ' \n[xdebug] \n\
xdebug.client_host=host.docker.internal \n\
xdebug.mode=debug \n\
xdebug.start_with_request=yes \n\
xdebug.idekey="VSCODE" \n\
\n' >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
mode
此設置控制啟用哪些 Xdebug 功能。 我們已將develop
設置為啟用開發輔助,例如獲取更好的錯誤消息,並設置debug
以啟用分步調試。
client_host
這個設置告訴 Xdebug 運行文本編輯器或 IDE 的機器的 IP 地址或主機名。
start_with_request
此設置確定是否在 PHP 請求開始時激活函數跟蹤、垃圾收集統計信息、分析或步驟調試。 將其設置為 yes 會指示 Xdebug 始終啟動調試會話。
參考。 https://matthewsetter.com/setup-step-debugging-php-xdebug3-docker/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.