XDebug无法在Atom的php-debug包中断点停下来

9

我的问题是我找到了许多其他答案,但都没有对我起作用。代码和“服务器”都在本地主机上。编辑:尝试使用一些答案中建议的9001端口,以及尝试使用Visual Studio Code,但奇怪的是:它在VS Code中断点异常但仍然不会在断点处中断。

enter image description here

我的设置

软件

  • Windows 10 Pro x64
  • MAMP (非专业版) 运行在端口81
  • atom
  • php-debug 包
  • xdebug-2.4.1-7.0-vc14.dll 扩展
  • 要调试的代码编写在 Laravel 框架内

配置

PHP info xdebug 部分

(full)

     xdebug

      xdebug support    enabled
    Version 2.4.1
    IDE Key XDEBUG_ECLIPSE
    XDEBUG NOT LOADED AS ZEND EXTENSION
    Supported protocols Revision
    DBGp - Common DeBuGger Protocol $Revision: 1.145 $
    Directive   Local Value Master Value
    xdebug.auto_trace   Off Off
    xdebug.cli_color    0   0
    xdebug.collect_assignments  Off Off
    xdebug.collect_includes On  On
    xdebug.collect_params   0   0
    xdebug.collect_return   Off Off
    xdebug.collect_vars Off Off
    xdebug.coverage_enable  On  On
    xdebug.default_enable   On  On
    xdebug.dump.COOKIE  no value    no value
    xdebug.dump.ENV no value    no value
    xdebug.dump.FILES   no value    no value
    xdebug.dump.GET no value    no value
    xdebug.dump.POST    no value    no value
    xdebug.dump.REQUEST no value    no value
    xdebug.dump.SERVER  no value    no value
    xdebug.dump.SESSION no value    no value
    xdebug.dump_globals On  On
    xdebug.dump_once    On  On
    xdebug.dump_undefined   Off Off
    xdebug.extended_info    On  On
    xdebug.file_link_format no value    no value
    xdebug.force_display_errors Off Off
    xdebug.force_error_reporting    0   0
    xdebug.halt_level   0   0
    xdebug.idekey   no value    no value
    xdebug.max_nesting_level    256 256
    xdebug.max_stack_frames -1  -1
    xdebug.overload_var_dump    2   2
    xdebug.profiler_aggregate   Off Off
    xdebug.profiler_append  Off Off
    xdebug.profiler_enable  Off Off
    xdebug.profiler_enable_trigger  Off Off
    xdebug.profiler_enable_trigger_value    no value    no value
    xdebug.profiler_output_dir  C:\Windows\Temp C:\Windows\Temp
    xdebug.profiler_output_name cachegrind.out.%p   cachegrind.out.%p
    xdebug.remote_addr_header   no value    no value
    xdebug.remote_autostart On  On
    xdebug.remote_connect_back  On  On
    xdebug.remote_cookie_expire_time    3600    3600
    xdebug.remote_enable    On  On
    xdebug.remote_handler   dbgp    dbgp
    xdebug.remote_host  127.0.0.1   127.0.0.1
    xdebug.remote_log   no value    no value
    xdebug.remote_mode  req req
    xdebug.remote_port  9000    9000
    xdebug.scream   Off Off
    xdebug.show_error_trace Off Off
    xdebug.show_exception_trace Off Off
    xdebug.show_local_vars  Off Off
    xdebug.show_mem_delta   Off Off
    xdebug.trace_enable_trigger Off Off
    xdebug.trace_enable_trigger_value   no value    no value
    xdebug.trace_format 0   0
    xdebug.trace_options    0   0
    xdebug.trace_output_dir C:\Windows\Temp C:\Windows\Temp
    xdebug.trace_output_name    trace.%c    trace.%c
    xdebug.var_display_max_children 128 128
    xdebug.var_display_max_data 512 512
    xdebug.var_display_max_depth    3   3

php.ini xdebug部分

(完整)

[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1    # Not safe for production servers
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
xdebug.idekey=xdebug.atom

既然你已经将Xdebug加载为Zend扩展,能否发布更新的“PHP info xdebug部分”?另外,你尝试过重新启动IIS和Atom吗? - Binod Kalathil
你尝试过在Atom中激活调试器选项并设置“在第一行中断”吗?这可以排除你的断点只是在运行时未被调用的代码块中的可能性。 - Pitt
@Pitt 是的,我做了。 - online Thomas
2个回答

5
我已经上传了你的PHP信息输出 - https://xdebug.org/wizard.php。其中我收到了以下信息:“您似乎只将Xdebug作为正常的PHP扩展加载。这将导致奇怪的问题,请参见https://xdebug.org/docs/faq#php-ext。”

问:Xdebug仅作为PHP扩展而不是Zend扩展加载。

为了使Xdebug正常工作,包括断点等功能,必须将其作为Zend扩展加载,而不仅仅是作为普通的PHP扩展。某些安装工具(如PEAR/PECL)有时会建议您使用“extension=xdebug.so”来加载Xdebug。这种做法是不正确的。要解决此问题,请查找在“Loaded Configuration File”和“Additional .ini files parsed”中列出的任何INI文件中的“extension=xdebug.so”行,删除它,并返回Tailored Installation Instructions。

所以下面是你的指示:
  1. 下载php_xdebug-2.4.1-7.0-vc14.dll
  2. 将下载的文件移动到C:\MAMP\bin\php\php7.0.9\ext
  3. 编辑C:\MAMP\conf\php7.0.9\php.ini并添加以下行zend_extension = C:\MAMP\bin\php\php7.0.9\ext\php_xdebug-2.4.1-7.0-vc14.dll
  4. 重启web服务器

你还可以查看特殊的“调试”函数,它们是使用xdebug扩展提供的 - https://xdebug.org/docs/all_functions 例如,您可以使用xdebug_break()。它允许您在不使用IDE的情况下指定断点。
关于Atom设置的一个注意事项。你可以在这个页面https://atom.io/packages/php-debug上找到配置过程的解释。我想引起你对config.cson文件的注意。请查看我的配置片段。你的项目中是否有类似的东西?
"php-debug": 
{
    ServerPort: 9000
    PathMaps: [
        "remotepath;localpath"      
    ]
}

非常抱歉告诉您,这些步骤之后仍然没有任何改变。但是至少因为您的努力和出色的推理,我会给您点赞。 - online Thomas
我在 PHP 中添加了关于“debug”函数的注释。如果问题与 IDE 相关,它可能会有所帮助。 - Vladimir Posvistelik
@Thomas,我建议您检查您的config.cson文件。我在我的答案中添加了一些备注。 - Vladimir Posvistelik
1
@Thomas 好的,让我们在评论中讨论这个问题。如果我们找到解决方案 - 我会更新我的答案。我注意到你已经启用了选项 xdebug.remote_connect_back。在这里 - https://github.com/gwomacks/php-debug/issues/192 - 我发现了一个问题,解决方案是禁用此选项。如果怎么样呢? - Vladimir Posvistelik
@Thomas 让我知道它是否有帮助。这个问题...现在对我来说几乎是个人问题 :) - Vladimir Posvistelik
弗拉基米尔,结果仍然相同。重新加载页面后,插件显示已连接,但不会在断点处中断。 - online Thomas

2

可能只是猜测,不过您是否尝试在框架的入口处设置断点?

我曾经遇到类似的问题,可能是因为xdebug无法将本地文件映射,而在第一行代码上设置断点可以解决这个问题。

例如,PhpStorm有一个名为“在第一行处中断”的调试选项,这对我很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接