簡體   English   中英

Docker 和 XDebug 不讀取斷點 VSCode

[英]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 年編輯后也需要)

之后,我用這樣的調試服務器設置了我的 PHP 風暴: php風暴配置1

php風暴配置2

在那之后,我的斷點在哪里工作,如果你使用的是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM