PHP调试器不会在断点处停止:Eclipse和Xdebug

Ste*_*eve 10 php eclipse debugging breakpoints xdebug


客户端工具:(没有Apache,没有PHP)


用于PHP开发人员的Eclipse

版本:Oxygen.2发布(4.7.2)

Build id:20171218-0600

Redhat Enterprise Linux 6.9

java版"1.8.0_101"

Java(TM)SE运行时环境(版本1.8.0_101-b13)

Java HotSpot(TM)64位服务器VM(内置25.101-b13,混合模式)


远程服务器PHP Web应用程序的位置是:


PHP 5.6.5

Zend Engine v2.6.0,版权所有(c)1998-2014 Zend Technologies

Zend技术公司的Zend OPcache v7.0.4-dev,版权所有(c)1999-2014

Derde Rethans的Xdebug v2.2.7,版权所有(c)2002-2015


我在此主题上发现了以前的帖子.我不明白所有要尝试的事情.我尝试了我能理解的东西,但没有任何运气.主要是使用xdebug_break(); (再次,没有运气)


我正在使用Eclipse和Xdebug来调试远程PHP网站.我的问题是我无法让调试器停在我设置的断点上.

我正在使用Eclipse和"同步PHP项目"进行远程PHP开发.除了Eclipse之外没有任何东西在我的计算机上运行.

我通过Eclipse在远程服务器上使用Xdebug调试器.

当我使用调试器时,它将转到index.php.我可以走一段时间,看看变量的价值.

问题是Xdebug不会在我设置的任何断点处停止.

我包括我的Xdebug设置

任何有关如何找到并解决问题的线索都会受到欢迎

Xdebug设置:

xdebug support,enabled
Version,2.2.7

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.max_nesting_level,100,100
xdebug.overload_var_dump,On,On

xdebug.profiler_aggregate,Off,Off
xdebug.profiler_append,Off,Off
xdebug.profiler_enable,Off,Off

xdebug.profiler_enable_trigger,On,On
xdebug.profiler_output_dir,/tmp,/tmp
xdebug.profiler_output_name,cachegrind.out.%t.%s,cachegrind.out.%t.%s

xdebug.remote_autostart,Off,Off

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,/var/log/xdebug/xdebug.log,/var/log/xdebug/xdebug.log
xdebug.remote_mode,req,req
xdebug.remote_port,9000,9000

xdebug.scream,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_format,0,0
xdebug.trace_options,0,0
xdebug.trace_output_dir,/tmp,/tmp
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
Run Code Online (Sandbox Code Playgroud)

编辑

我创建了一个屏幕截图专辑.

第一个是来自Eclipse的错误消息,当我整夜离开它时发生.

屏幕截图的其余部分是我的phpinfo输出的顺序(顶部>向下).

https://imgur.com/a/9DKev

我的phpinfo()输出中没有Zend部分,尽管有这些变量

report_zend_debug = on
zend.detect_unicode On
zend.enable_gc  On
zend.multibyte  Off 
zend.script_encoding = no value
Run Code Online (Sandbox Code Playgroud)

Jan*_*tis 7

根据您的描述,似乎:

  • 与远程服务器的调试连接正常
  • 破坏点在index.php上工作,但不在其他任何地方

我的假设是本地代码和服务器代码之间的文件映射不起作用,更确切地说,eclipse无法将您的文件映射到服务器代码.

要解决这个问题,您必须在eclipse项目的运行/调试设置中设置路径映射设置.

去:

  1. 项目 - >菜单中的属性
  2. 选择"运行/调试设置"
  3. 编辑启动配置设置
  4. 在选项卡Server,部分PHP服务器上,选择configure
  5. 打开"PHP Server"窗口,选择路径映射选项卡
  6. 服务器上的Path设置为服务器上项目的路径,并将Local path设置为well,这是不言自明的.

在此输入图像描述


Leo*_*Mew 0

尝试禁用诸如:opcache、zend 优化器等所有可用于解释 php 代码的扩展。如果你幸运并且它开始工作,请让 xdebug.so 最后加载,在所有其他模块之后,这样你就可以再次重新启用它们。将 xdebug.so 放在所有其他 php .so 所在的文件夹中,并将其加载到 php ini 的最后一行,并提供xdebug.so 的完整路径

如果你只是将它放在 php.ini 的最后一行,那么一些不兼容的模块可以在之后加载,配置来自 /etc/php/5.6/apache2/conf.d/*。因此,只需将配置移动一段时间即可。

在帖子底部的链接中,我完全禁用(但不通过 apt 删除)opchache 模块,并将其放置在 php.ini 中,调试器之前的 1 行中。

我记得,检查 phpinfo() 输出中扩展加载的顺序,位于 zend 徽标的左侧。调试器必须位于该输出块的最后一行。发布你的 phpinfo(); 输出。

另一种方式,我自己走:(我推荐它)

如果您拥有远程服务器的 root 访问权限,请尝试 Zend Debugger。它与 Zend Studio 捆绑在一起(不是免费的),但是某些 php 版本的调试器需要单独下载,5.6 是它可用的最新版本。他们没有为 php7 发布它,无论如何我不知道是否可以从试用版 Zend studio 复制它。如果删除了,无法下载,我可以发给你。

Zend 调试器现在更适合 php,Zend 团队参与了 Eclipse PDT 开发(但他们在付费版本中实现了最有品味的功能)

我的环境与你类似,XDebug 也有问题,然后决定删除它并尝试 Zend 调试器。我在askubuntu上有关于安装它和解决问题的问题和答案:https://askubuntu.com/questions/1002252/installing-configuring-zend-debugger-for-eclipse-pdt

简而言之,解决方案是:

在配置中注释掉它:(cli 版本似乎符号链接也被禁用)

lenya@JabbaDesktop:~$ sudo nano /etc/php/5.6/apache2/conf.d/10-opcache.ini

; configuration for php opcache module
; priority=10
; zend_extension=opcache.so
Run Code Online (Sandbox Code Playgroud)

在 /etc/php/5.6/apache2/php.ini 底部:

[Zend]
zend_extension="/usr/lib/php/20131226/opcache.so"
zend_extension="/usr/lib/php/20131226/ZendDebugger.so"
zend_debugger.allow_hosts=127.0.0.0/8,192.168.0.0/16
zend_debugger.expose_remotely=1
zend_debugger.connector_port=10137
Run Code Online (Sandbox Code Playgroud)

前两行(.so)应该完全按照这个顺序。 安装调试器“如何”很容易在谷歌中找到。没有人提到上面的问题。

更新:

当我使用调试器时,它将转到index.php。我可以单步执行一段时间并查看变量的值。

这意味着您已经连接到服务器,问题不存在