debugging - Laradock + PhpStorm + Xdebug 失败,而 PhpStorm 验证成功

标签 debugging docker networking phpstorm xdebug

我已经为 PhpStorm 设置了调试配置,它已被 PhpStorm 成功验证:

enter image description here

还安装了 Chrome 的 Xdebug 助手。

问题是当我开始监听调试连接并在打开 Xdebug 帮助程序的情况下重新加载所需的页面时没有任何 react 。也试过这个bookmarklets没有运气。

没有错误什么的,什么都没有。

还尝试将不同的 IP 设置为 dockerhost:从 192.168.. 范围(来自网络设置),从 172.* 范围(来自 nginx),从 10.* 范围(默认为 10.0.75.1)。也试过docker.for.mac.internal.host容器启动时失败。

Docker 17.02、macOS Sierra、PhpStorm 2017.3

最佳答案

如果您使用的是 linux,请务必在防火墙中创建相应的规则。

但要更有效地解决此问题,您需要收集更多信息。

  • 启用 xdebug 日志记录 xdebug.remote_log=/var/www/xdebug.log在你
    xdebug.ini 或者您可以将其附加到 PHPStorm 的“Cli Interpreters > Configuration Options”中 (xdebug.remote_log,/path/inside/workspace/container/xdebug.log)
  • 您可以采取的另一个步骤是监视与您的机器的传入连接。 (在安装 docker 的地方运行它)。它将开始监听端口 9000 上的所有传入连接尝试。
  • sudo tcpdump -i any port 9000
    现在运行一次调试器,检查容器内的日志(默认为工作区),看看是否有任何来自容器的传入连接尝试。

    如果您看到类似 Time-out connecting to client (Waited: 200 ms). :-( 的内容,您的防火墙可能会阻止传入连接。

    要打开它们,您可以使用 ufw 添加规则
    sudo ufw allow in from 172.22.0.0/24 to any port 9000 (或写下一个特定的 ip)一定要仔细检查这是试图连接的 ip

    这将允许来自 172.22.0.* 的端口 9000 上的所有连接(这是 laradock 用于其虚拟网络的内容)。请务必仔细检查日志,可能您的设置使用不同的 IP 范围)

    我的工作 xdebug.ini (在 php-fpm 和工作区容器中都是相同的)
    xdebug.remote_host=dockerhost
    xdebug.remote_connect_back=0
    xdebug.remote_port=9000
    xdebug.idekey=PHPSTORM
    
    xdebug.remote_autostart=1
    xdebug.remote_enable=1
    xdebug.remote_log=/var/www/xdebug.log
    
    xdebug.cli_color=1
    xdebug.profiler_enable=0
    xdebug.profiler_output_dir="~/path/to/profiler.log"
    
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    
    xdebug.var_display_max_children=-1
    xdebug.var_display_max_data=-1
    xdebug.var_display_max_depth=-1
    

    如果上述方法都不起作用,另一个步骤是检查您是否已经在端口 9000 上运行了任何容器。如果是这样,那么您将需要使用另一个端口,只是不要忘记从 docker 中公开它。

    (说明:docker 将端口绑定(bind)(公开)到主机,以便任何传入连接都定向到正确的容器,如果采用 9000,xdebug 将无法连接到您机器上的任何 IDE,即使 IDE 说它正在运行监听器)
    希望这可以帮助。

    关于debugging - Laradock + PhpStorm + Xdebug 失败,而 PhpStorm 验证成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446088/

    相关文章:

    visual-studio - 如何使用 Visual Studio 中的立即窗口?

    python - 如何在Docker群中使用ray

    linux - nf_ct_get(skb,&ctinfo) 函数获取 IPv6 udp 数据包的 netfiter conntrack 'struct conn'

    linux - 如何将 Linux 内核取消优化并使用 -O0 进行编译?

    python - 我需要帮助调试 Pub/Sub Google Cloud Functions

    docker compose up 无法安装卷

    iOS。通过 IP 在同一本地网络中获取其他设备/计算机名称

    java - 我应该如何运行服务器/客户端代码?

    javascript - 无法使用行号时如何查找错误位置

    python - 使用 Docker 执行任意代码