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

时间:2018-02-12 19:03:54

标签: php eclipse debugging xdebug breakpoints

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

面向PHP开发人员的Eclipse

版本:Oxygen.2版本(4.7.2)

构建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

Xdebug v2.2.7,版权所有(c)2002-2015,作者Derick Rethans

我在此主题上找到了以前的帖子。我不明白所有要尝试的事情。我尝试了我能理解的东西,但没有任何运气。主要是使用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

修改

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

第一个是来自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

4 个答案:

答案 0 :(得分:5)

根据您的描述,似乎:

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

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

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

转到:

  1. 项目 - >菜单中的属性
  2. 选择“运行/调试设置”
  3. 修改启动配置设置
  4. 在选项卡服务器上, PHP服务器部分,选择配置
  5. 打开“PHP Server”窗口,选择路径映射选项卡
  6. 服务器上的路径设置为服务器上项目的路径,并设置本地路径,这是不言自明的。
  7. enter image description here

答案 1 :(得分:3)

如果您按照以下步骤操作,我认为它应该可行

最新的XDebug版本

根据此https://xdebug.org/,您的XDebug版本是2015年。所以你应该升级到最新版本

设置XDebug配置

99-xdebug.ini/usr/local/etc/php/conf.d//etc/php/conf.d设置/etc/php/5.6/cli/conf.d,具体取决于系统中存在的

xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log

创建SSH调试隧道

要调试的机器,需要使用

启动SSH隧道
ssh -R 127.0.0.1:9000:127.0.0.1:9000 -p 22 <user>@<phpserver>

在Eclipse中配置远程路径映射

在端口9000和远程路径上配置eclipse以进行调试,现在它可以正常工作

答案 2 :(得分:0)

尝试禁用以下内容:opcache,zend optimizer等,所有扩展与解释php代码一起使用。如果运气好并且它开始工作,请在所有其他模块之后最后加载xdebug.so,以便重新启用它们。将xdebug.so放在所有其他php .so所在的文件夹中,并将其加载到php ini的最后一行,其中完整路径到xdebug.so

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

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

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

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

如果您具有远程服务器的root访问权限,请尝试Zend Debugger。它与Zend Studio(非免费),捆绑在一起,对于某些php版本有单独的调试器下载,5.6是它可用的最新版本。他们不会发布它为php7,无论如何我不知道是否有可能从试用Zend工作室复制它。如果删除,无法下载,我可以将其发送给您。

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

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

简而言之,解决方案是:

  

在config中注释掉它:( 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
  

在/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
  

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

<强>更新

  

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

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

答案 3 :(得分:0)

  

我正在使用Eclipse和一个&#34;同步PHP项目进行远程PHP开发。除了Eclipse之外什么都没有在我的电脑上运行。

这是你的问题。您必须允许xDebug连接。 xDebug(PHP Web服务器)尝试连接,但可能不知道你在哪里;)

有两种选择:

  1. 如果您不在NAT之后或与测试服务器位于同一网络中,则必须在PC上打开端口9000。如果您在NAT后面,您还需要转发端口9000(这是默认的,可以更改)。接下来设置正确"xdebug.remote_host=your_public_ip"xdebug.remote_connect_back = on。从任何主机启用接受远程会话(JIT)也是好的(首选项 - &gt; PHP - &gt; Debug - &gt; Debuggers - &gt; xDebug),之后您将能够通过浏览器扩展轻松运行调试器,如xDebug帮手。

  2. 配置调试器启动配置(&#34之后的小箭头;调试&#34; icon&#34;),通过SSH隧道进行调试。在这种情况下,xdebug.remote_host=127.0.0.1将是正确的。 注意:ssh服务器主机必须与服务器域相同,并且必须在端口22上提供SSH服务器