Visual Studio代码PHP调试不起作用

Posted

技术标签:

【中文标题】Visual Studio代码PHP调试不起作用【英文标题】:visual studio code PHP debugging not working 【发布时间】:2017-10-02 16:02:46 【问题描述】:

我已经安装了 VS CodePHP 调试器

我正在使用 xampp。

我尝试运行代码 (2) 方式(收听和启动)。

Listen 只是坐在那里,而 Launch 在调试控制台中显示 spawn php ENOENT

这是我的 launch.json。

    
    "version": "0.2.0",
    "configurations": [

        
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        ,
        
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "$file",
            "cwd": "$fileDirname",
            "port": 9000
        
    ]

我做错了什么?

【问题讨论】:

你在php.ini中开启远程调试了吗? 您的问题是什么?对我来说似乎还不清楚。 我不知道如何格式化评论并且达到了 5 分钟的时间限制。 我刚刚用这个和其他信息写了一个公共要点,所以我不会忘记。看看是否有帮助:gist.github.com/MetalFatigue82/850c39a8e1f9d87715c2a62421e40c04 我在这里写了一个完整的指南:cloudways.com/blog/php-debug-with-xdebug 【参考方案1】:

您是否检查以确保防火墙允许端口 9000 上的入站连接?我在我的一台开发机器上遇到了这个确切的问题。虽然所有其他设置都是正确的,但我无法达到断点。一旦我在防火墙中添加了一个例外,它就开始工作了。

因此,如果这是您的设置存在的问题,您有两种解决方法。

    完全关闭防火墙,或至少在您处理项目时暂时关闭。 为您的防火墙设置添加一个例外: 转到 Windows 控制面板并键入“防火墙”。 从左侧导航中选择“入站规则”,然后单击“新建规则”。 选择“端口”,然后点击“下一步”。 确保选中“特定本地端口”选项并输入“9000”作为端口号。 选择“允许连接”,然后点击“下一步”。 检查“域”、“私人”和“公共”,然后点击“下一步”。 输入描述性名称,例如“XDebug Port”,然后点击“完成”。 重新启动 Visual Studio Code,然后再次尝试调试。

假设您正确设置了配置的 Web 服务器部分,这应该允许您进行调试。

希望这会有所帮助。

【讨论】:

【参考方案2】:

刚刚成功:

    我们有 OS Windows with Microsoft Visual Code 并且我们已经安装了 'PHP Debug' 模块 https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug#overview 使其工作的步骤已经写在这里,但是我再写一遍:

    安装 XDebug。在线向导https://xdebug.org/wizard.php 帮助您,只需在此处发布 phpinfo() 数据。在 phpinfo.php 中保存:

    <?php phpinfo(); ?>
    

然后在浏览器中打开localhost/phpinfo.php,将您看到的所有内容(Ctrl+A 然后Ctrl+C)复制到向导。它显示您获得的信息和要执行的步骤:

    打开在指令php.ini中显示总是有很多php.ini - apache文件夹有一个php.ini,php有php.ini和phpForApache.ini。但是phpinfo使得清楚地显示真正使用的是哪一个

    2.1。并使用 xdebug.remote_enable = 1xdebug.remote_autostart = 1 对其进行配置。我的工作示例:

    [XDebug]
    zend_extension = "c:\wamp64\bin\php\php7.1.9\ext\php_xdebug-2.6.0beta1-7.1-vc14-x86_64.dll"    
    xdebug.stopOnEntry = true
    xdebug.profiler_enable = off
    xdebug.profiler_enable_trigger = Off
    xdebug.profiler_output_name = cachegrind.out.%t.%p
    xdebug.profiler_output_dir ="c:/wamp64/tmp"
    xdebug.show_local_vars=0
    ;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
    xdebug.remote_enable = 1
    xdebug.remote_autostart = 1
    xdebug.remote_handler = "dbgp"
    xdebug.remote_host = "127.0.0.1"
    xdebug.remote_log = "C:\wamp64\tmp\xdebug.txt"
    xdebug.remote_port = 9000
    xdebug.trace_output_dir = "C:\wamp64\tmp"
    xdebug.remote_cookie_expire_time = 36000
    

    重新启动 Apache2 网络服务器。

还有:

出于某种原因,我首先让 xdebug 在 Netbeans 上工作以进行测试,然后我才在手册中找到选项 xdebug.remote_autostart = 1 使其也可以在 VS Code 中工作。

如果您不确定 XDebug 的安装,请查看 phpinfo 页面中的“with Xdebug”字样,并查看 logs/apache_errors.log 中的“加载 php_xdebug 失败”(下载的 DDL 不正确)。然后检查任何其他 IDE。

问候!

【讨论】:

刚刚拯救了我的一天!我想知道为什么 XDebug 的文档和这个答案一样明确 花了一整天的时间,在关注您的评论xdebug.remote_autostart = 1后终于可以正常工作了 在Ubuntu上测试过,只设置zend_extensionxdebug.remote_autostartxdebug.remote_enable就够了 我在 phpStorm 文档之后安装了调试,然后我想尝试 Visual Studio Code,但一开始它没有用,但添加 xdebug.remote_autostart=1 也为我解决了这个问题。 这对我有用 - 我的断点没有被停止。我在 MacOS big sur 上运行 VS Code,调试远程 centos 环境。调试在 PHPStorm 中运行良好,而不是在 VSCode 中。我发现我需要更改服务器上的 xdebug.ini(在 /etc/php.d 下),添加 xdebug_remote_autostart,重新启动 php-fpm 和 BINGO!【参考方案3】:

在您的 lunch.json 文件中添加以下行:

"runtimeExecutable": "c:\\xampp\\php\\php.exe"


    "version": "0.2.0",
    "configurations": [
        
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        ,
        
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "$file",
            "cwd": "$fileDirname",
            "port": 9000,
            "runtimeExecutable": "C:\\Program Files\\PHP\\v7.3\\php.exe"
        
    ]

【讨论】:

“runtimeExecutable”行帮我做了,找了好几个小时! 也为我做了,但仅适用于“启动当前打开的脚本”模式,而不是“监听 XDebug”,所以我无法调试整个应用程序,只是确定了选定的文件: /无论如何都非常有用!【参考方案4】:

我已经重新启动了一切,但我仍然没有在断点处停止。 最后,我在 php.ini 中添加了这一行 xdebug.remote_port = "9000" 解决我的问题。

【讨论】:

这是一个常见的。在 XDebug 3.0 中,当 php.ini 中不存在 xdebug.remote_port 条目时使用的默认端口从 9000 更改为 9003,因此如果您相应地配置了您的 launch.json,那么它也会匹配。【参考方案5】:

我会使用 NetBeans,因为它们具有更主动的 Xdebug 界面。此外,xdebug V3 有一个不同的端口(端口 9003),因此您应该进行调整。在 netbeans 和其他调试器中会说端口 9000,但现在是 9003

【讨论】:

【参考方案6】:

对于今天寻找答案的任何人,我帮助将php.ini 部分 [XDebug] 更改为:

xdebug.mode = debug
xdebug.start_with_request = yes
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.stopOnEntry = true
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.output_dir ="c:\xampp\tmp"
xdebug.show_local_vars=0
xdebug.remote_handler = "dbgp"
xdebug.client_host = "127.0.0.1"
xdebug.log = "C:\xampp\tmp\xdebug.txt"
xdebug.client_port = 9000
xdebug.remote_cookie_expire_time = 36000

我使用了@Eluny 帖子中的设置,但是对于一些较新版本的 XDebug,属性名称发生了变化。在文档页面上,您可以找到有关 changes

的信息

【讨论】:

每个版本的 xdebug 都会更改参数名称,因此您需要查看文档以了解更改 天啊,经过一千次试验。非常感谢【参考方案7】:

2021 年刚刚使用 xdebug (v3.x) 完成,一些步骤不同,所以我将引用更多细节:

在你的 PHP 上安装 xdebug 模块

    运行调用“phpinfo();”的PHP页面并复制输出内容(是的,您可以选择所有文本和Ctrl+C kbd>) 并粘贴到https://xdebug.org/wizard

    xdebug.org 网站会回答你要下载的正确 xdebug 模块版本(例如:php_xdebug-3.0.4-7.4-vc15-x86_64.dll"),它还会告诉你如何安装它,在哪个目录以及包含在 PHP.ini 中的引用。

    Enable xdebug settings to debug mode and enable the remote step debugger on PHP.ini as the following example, I have used

[XDebug]
xdebug.mode=debug
xdebug.remote_enable=on
xdebug.start_with_request=yes
zend_extension = C:\xampp\php\ext\php_xdebug-3.0.4-7.4-vc15-x86_64.dll

您可能需要根据您的情况更改这些 xdebug 设置(例如使用另一个客户端端口),您可以看到运行“phpinfo()”的所有可能参数的列表。此技巧将在您遇到问题时为您提供帮助,您还必须确保“步骤调试器显示为已启用”,它还在与每个主题相关的正确列上提供链接。

因此,在之前的设置中,您可以检查主机和端口是否符合您在 VS 代码上使用的预期。

设置您的 Visual Studio 代码

    使用扩展选项卡,搜索“PHP Debug”并安装它,(值得一提的是,扩展页面上的详细信息也有它自己的教程)。

    在 VS Code 菜单 File->Preferences->Settings 中,我为我的 PHP 可执行路径添加了标签:

    最后在 VS Code 调试选项卡上,您将被要求创建一个新的 launch.json 文件,只需单击它并选择 PHP。这里重要的一步是“Listen for Xdebug”项上的“配置”部分,确保端口与您之前在 XDebug 上的 phpinfo() 报告中显示的端口相同。

    确保您的 VS Code 项目文件夹正确并使用“Lister for Xdebug”开始新的调试。

如果出现错误或什么都没发生,请重点检查“phpinfo()”上显示的 XDebug 设置,以及“Listen for XDebug”部分的“launch.json”或检查网络服务器 error.log 是否有可能的错误详情。

最好的问候!

【讨论】:

【参考方案8】:

在新版本的XDebug 3.0.X 中,XDebug 的一些参数发生了变化。如果您的客户端端口为 9000,您还需要在 php.ini 文件中设置xdebug.client_port = 9000。在 Visual Studio Code 中打开您的 PHP 项目,然后单击 Run -&gt; Add Configuration 并将端口更改为 9000。现在您可以使用选项“Listen for XDebug”

【讨论】:

【参考方案9】:

我遇到了类似的问题(没有错误没有输出)。后来我注意到如果我创建新文件夹它可以工作,在我的情况下它是隐藏文件。创建新文件夹并将源文件移动到新文件夹可能会解决问题。

【讨论】:

【参考方案10】:

您只需在 php.ini 文件中进行这些更改。 Xdebug v3.x.x : (注意此版本的端口号已改为9003)。

[XDebug] xdebug.mode = 调试 xdebug.start_with_request = 是

对于 Xdebug v2.x.x:

[XDebug] xdebug.remote_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_port = 9000

【讨论】:

以上是关于Visual Studio代码PHP调试不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio Code 进行调试不起作用

Visual Studio 2015 RTM - 调试不起作用

Visual Studio Code 上的 vuejs3 调试不起作用

调试模式在 Visual Studio 2015 中不起作用

使用以前版本的 Visual Studio 的 devenv 从 VS2017 测试 Visual Studio 扩展不起作用

Visual Studio 2013 编辑并继续不起作用