xdebug不会在断点处停止

时间:2010-10-26 08:40:34

标签: php eclipse xdebug

我花了几个小时来设置我的IDE以使用eclipse和xdebug来调试PHP。除了我在eclipse上设置的断点之外,一切都很好。如果我双击某一行来添加断点,调试器希望停止..如果添加行xdebug_break(),调试器就会在该行停止...

这可能是配置问题。有谁可以帮助我?

  • Eclipse:Eclipse PDT 2.2.0 All In 一个Windows 32位
  • Xdebug:5.3 VC6 (32位)
  • PHP:PHP Version 5.3.3

PHP.ini中

[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "c:/temp"
xdebug.collect_params = 4
xdebug.collect_return = on
xdebug.collect_vars = on

xdebug.show_local_vars = 1

20 个答案:

答案 0 :(得分:18)

如果xdebug没有在代码的任何部分停止,请将xdebug_break()添加到代码的这一部分。

答案 1 :(得分:12)

似乎有几个问题可能是这个问题的根源。在我的情况下,我认为我需要设置一些路径映射。

在下面找到的设置 rightclick-project->properties->PHP Debug
然后
server->edit->path mapping
错了。

我手动添加了一些我认为是正确的东西,但Eclipse似乎可以通过自己完成这一切。删除映射使其工作。

答案 2 :(得分:10)

我在Eclipse PDT和Xdebug方面遇到了类似的问题。原因是Eclipse正在通过IPv6进行监听,但Xdebug尝试通过IPv4进行连接:

chriki@machine:~$ netstat -an | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN

Xdebug doesn’t seem to support IPv6,但是。

添加行

-Djava.net.preferIPv4Stack=true

-vmargs文件中的eclipse.ini行之后,Eclipse开始通过IPv4收听:

chriki@machine:~$ netstat -an | grep 9000
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN

调试现在可以完美运行。

答案 3 :(得分:7)

我已经解决了这个问题。

在我的php.ini上,我将xdebug添加为扩展而不是zend_extension。

的php.ini

zend_extension=C:\EasyPHP-5.3.3\php\ext\php_xdebug.dll

注意:路径必须是完整路径而不是相对路径。

调试器工作得很好。美味!

答案 4 :(得分:3)

我遇到了同样的问题,PDT会启动调试会话,甚至打破脚本的第一行并允许从那里踩到,但如果我点击Resume,它会愉快地运行我设置的任何手动断点。在摆弄它并阅读其他一些回复之后,我修复了它。

我一直在尝试设置路径图(在PHP服务器配置中),因为我的项目路径和Web服务器路径不同,但由于某种原因这不起作用所以我最终添加了apache配置的别名匹配PDT要求的位置。但是,我没有删除此路径映射设置。当我删除路径图时,断点开始工作!

可能是其他不能正常工作的症状(路径图设置),但断点和调试现在对我有用了:)

答案 5 :(得分:2)

移动我的一些本地项目文件夹后,这个问题突然出现了。我可以让xdebugger在文件的开头打破,但它会跳过其余的断点。

如果您使用的是Netbeans,请检查您的Project Url(项目属性 - >运行配置)是否指向正确的位置。项目URL指向正确的文件夹,断点开始按预期工作。

答案 6 :(得分:2)

我遇到了同样的问题。解决方案是打开正确的文件并在其中添加断点。

我的本​​地服务器在我的虚拟Z:驱动器上(我使用的是denwer而不是WAMP)。 Z驱动器指向我的D:/ webserver文件夹。所以我可以打开我的文件1) Z:/myproject/script.php 和2) D:/webserver/myproject/script.php

由于某些原因,调试器仅在打开的 Z:/myproject/script.php 文件中停止断点。

如何测试我的解决方案???下一步:

  1. 打开您要调试的任何php文件
  2. xdebug_break()添加到任意行并保存文件
  3. 运行debug
  4. 在我的情况下,调试过程启动后,我的phpDesigner IDE在IDE中打开正确的文件,并在xdebug_break()行停止。因此,在这个新打开的文件中,您可以添加断点,它们将起作用。使用打开的文件进行调试。

答案 7 :(得分:1)

我几天都遇到了同样的问题(!),因为我意识到问题是最微不足道的。

配置:

  • (Windows 7主机)
  • VirtualBox Machine上的Ubuntu 12.04
  • 手动安装LAMP
  • Eclipse Indigo + PDT
  • 的php5-Xdebug的

/etc/php5/apache2/php.ini

[XDebug]
zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_output_dir=/tmp

调试器没有停在断点处,也没有停在xdebug_break();

...这是由于默认的Apache DocumentRoot文件夹的/var/www权限

我将其更改为/home/user/Documents/www

答案 8 :(得分:1)

快速回答:删除php脚本路径上的所有空格。

上下文:
PDT插件版本3.7.0中存在一个错误,它会阻止调试器在断点处停止 当脚本的路径包含空格时会发生这种情况!
它已经修复,但我想目标版本是4.0.0,尚未发布 保存我一天的评论是https://bugs.eclipse.org/bugs/show_bug.cgi?id=489646#c7("评论7")。

答案 9 :(得分:1)

这已经让我失望了大约3个小时,只是努力了。所以,在你把枪放在头上之前,试试吧。 Eclipse启动时,选择一个新工作区,然后重新设置项目!

在我这样做之后,我的断点再次被击中! 我的破发点工作正常,然后他们突然停止工作。 我试过:

  1. 删除所有断点

  2. 清洁项目

  3. 重新安装eclipse

  4. 上述任何一项都不适合我!

    BTW我正在使用窗口7。

    我希望这些信息可以拯救某人的生命!

    BTW:以下是您使用xdebug和vmwere进行设置的步骤,使用带有eclipse的窗口7客户端:

    下载vmwere

    downlaod and setup vmwere with:CentOS-7-x86_64-Everything-1511.iso

    禁用防火墙

    systemctl禁用firewalld

    systemctl stop firewalld

    systemctl status firewalld

    通过ftp连接

    ifconfig找出Ip

    的ifconfig

    eno16777736:flags = 4163 mtu 1500

    inet 192.168.170.128 netmask 255.255.255.0 broadcast 192.168.170.255

    inet6 fe80 :: 20c:29ff:fec4:b8ca prefixlen 64 scopeid 0x20

    ether 00:0c:29:c4:b8:ca txqueuelen 1000(以太网)

    RX包254字节20919(20.4 KiB)

    RX错误0丢弃0超出0帧0

    TX包95字节10225(9.9 KiB)

    TX错误0丢失0超支0载波0冲突0

    192.168.170.128是ip

    设置LAMP

    rpm --import / etc / pki / rpm-gpg / RPM-GPG-KEY *

    yum -y install epel-release

    yum -y install mariadb-server mariadb

    systemctl start mariadb.service

    systemctl enable mariadb.service

    mysql_secure_installation

    yum -y install httpd

    systemctl启动httpd.service

    systemctl启用httpd.service

    yum -y install php

    service httpd restart

    yum -y install php-mysql

    yum -y安装php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring

    php-snmp php-soap curl curl-devel

    service httpd restart

    yum install phpMyAdmin

    在Windows上打开cmd

    ,键入ipconfig

    查找

    以太网适配器VMware Network Adapter VMnet8:

    Connection-specific DNS Suffix  . : localdomain
    
    Link-local IPv6 Address . . . . . : fe80::94b8:9e5c:c772:3d47%19
    
    IPv4 Address. . . . . . . . . . . : 192.168.170.1 [ this is the widnows ip to allow ]
    
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    
    Default Gateway .
    
    /etc/httpd/conf.d/phpMyAdmin.conf中的

    更改:

    AddDefaultCharset UTF-8
    
    <IfModule mod_authz_core.c>
    
      # Apache 2.4
    
      <RequireAny>
    
        Require ip 127.0.0.1
    
        Require ip ::1
    
      </RequireAny>
    
    </IfModule>
    
    <IfModule !mod_authz_core.c>
    
      # Apache 2.2
    
      Order Deny,Allow
    
      Deny from All
    
      Allow from 127.0.0.1
    
      Allow from ::1
    
    </IfModule>
    

    为:

    AddDefaultCharset UTF-8
    
    <IfModule mod_authz_core.c>
    
      # Apache 2.4
    
      <RequireAny>
    
        Require ip 127.0.0.1
    
        Require ip ::1
    
      </RequireAny>
    
    </IfModule>
    
    <IfModule !mod_authz_core.c>
    
      # Apache 2.2
    
      Order Deny,Allow
    
      Deny from All
    
      Allow from 127.0.0.1
    
      Allow from ::1
    
    </IfModule>
    
    <IfModule mod_authz_core.c>
    
      # Apache 2.4
    
      <RequireAny>
    
        Require ip [ WINDOWS IP TO ALLOW GOES HERE ]
    
        Require ip ::1
    
      </RequireAny>
    
    </IfModule>
    
    <IfModule !mod_authz_core.c>
    
      # Apache 2.2
    
      Order Deny,Allow
    
      Deny from All
    
      Allow from [ WINDOWS IP TO ALLOW GOES HERE ]
    
      Allow from ::1
    
    </IfModule>
    

    service httpd restart

    更改$ cfg [&#39;服务器&#39;] [$ i] [&#39; auth_type&#39;] =&#39; cookie&#39 ;;到$ cfg [&#39;服务器&#39;] [$ i] [&#39; auth_type&#39;] =&#39; http&#39;;

    service httpd restart

    / etc / selinux / config change

    此文件控制系统上SELinux的状态。

    SELINUX =可以采用以下三个值中的一个:

    强制执行 - 强制执行SELinux安全策略。

    permissive - SELinux打印警告而不是强制执行。

    已禁用 - 未加载SELinux策略。

    SELINUX =执行

    SELINUXTYPE =可以取三个值中的一个:

    有针对性 - 目标流程受到保护,

    最低 - 修改目标政策。只有选定的流程 保护。

    mls - 多级安全保护。

    SELINUXTYPE =有针对性的

    此文件控制系统上SELinux的状态。

    SELINUX =可以采用以下三个值中的一个:

    强制执行 - 强制执行SELinux安全策略。

    permissive - SELinux打印警告而不是强制执行。

    已禁用 - 未加载SELinux策略。

    SELINUX =已停用

    SELINUXTYPE =可以取三个值中的一个:

    有针对性 - 目标流程受到保护,

    最低 - 修改目标政策。只有选定的流程 保护。

    mls - 多级安全保护。

    SELINUXTYPE =有针对性的

    reboot centos

    在WINDOWS POINT浏览器中:http://192.168.170.128/phpmyadmin,应该都是好的

    将网站复制到:/ var / www / html / [网站名称]

    chmod -R 777 html

    在etc / httpd / add中(这允许永久链接使用帖子名称)

    选项FollowSymLinks

    AllowOverride All

    订单允许,拒绝

    全部允许

    yum install php-devel(允许pipsize)

    制作php文件:并复制到网站root运行它并将htl复制到https://xdebug.org/wizard.php然后单击分析源按钮

    https://xdebug.org/wizard.php会发出如下指示:(关注他们)

    ...... 下载xdebug-2.4.1.tgz

    • 使用tar -xvzf xdebug-2.4.1.tgz解压缩下载的文件

    • 运行:cd xdebug-2.4.1

    • 运行:phpize(如果您没有phpize,请参阅常见问题解答。

    • 运行:./ configure

    • 运行:make

    • 运行:cp modules / xdebug.so / usr / lib64 / php / modules

    • 编辑/etc/php.ini并添加行

    • zend_extension = /usr/lib64/php/modules/xdebug.so

    • xdebug.remote_enable =开

    • xdebug.remote_host = 192.168.170.1

    • xdebug.remote_port = 9000

    • xdebug.remote_handler = dbgp

    ..... service httpd restart

    运行文件,你应该看到一个XDebug部分,如果是的话 服务器准备好了!

    下载Eclipse Neon

    档案&gt;从文件系统中打开项目

    完成(并等待)

    窗口首选项&gt; php&gt;服务器&gt;新

    • 服务器标签

      • 服务器名称[你喜欢什么]

      • 基本网址[IP或服务器名称]

      • 文档根目录[所有代码所在的硬盘驱动器上的位置必须与服务器上的位置相同]

      调试器选项卡

      • 调试器:Xdebug

      • port:9000

      服务器映射选项卡(单击添加)

      • 服务器上的路径:[您网站的整个路径] EG:/ var / www / html / website

      • 工作区中的路径[找到您添加的项目:从文件系统中打开项目]

    转到eclipse主窗口&gt;点击bug图标旁边的下拉箭头&gt;调试配置

    • 服务器标签

      • 文件:[这应该是您本地项目中的第一个文件 在应用程序打开时运行]

      • 网址:关闭自动生成:取消选中

        • 网址第一个文本框:[运行网站的服务器的IP或名称]

        • 网址第二个文本框:[如果您的网站不在根目录中,那就是它所在的目录]

    • 常用标签

      • 在收藏夹菜单中显示

        • 点击调试(复选框)

    窗口&gt;预期&gt;开放的预期&gt; PHP

    在首先被点击的php文件中放置一个断点(通过单击代码行上的垂直滚动条)

    最后点击eclipse中的调试图标,你的断点应该被击中(带断点的代码行将变为绿色)

    在Vemware上向世界开放Centos 7

    将VMeere网络设置更改为桥接

    向路由器添加规则,以便向运行cetnos的vmweare IP的任何流量添加端口

    将入站规则添加到允许http

    的widnows防火墙 PS:我没有时间检查我的gammer和speiing,处理它

答案 10 :(得分:0)

从Xdebug 2迁移到3时,这里出现类似问题。

有一个documentation,但最重要的是:

Xdebug的默认调试端口已从 9000 更改为 9003

要确保仅“步骤调试”处于活动状态,而不是:

xdebug.remote_enable=1
xdebug.default_enable=0
xdebug.profiler_enable=0
xdebug.auto_trace=0
xdebug.coverage_enable=0

您现在只能这样做:

xdebug.mode=debug

xdebug.remote_autostart设置已被删除。而是设置

xdebug.start_with_request=yes

答案 11 :(得分:0)

对我来说,问题似乎是Xdebug v2.7.0beta2-dev的php 7.2,请注意 beta 部分。这是使用puphpet.com安装的。我尝试了php 7.1,问题消失了。花了我几个小时找到这个!

答案 12 :(得分:0)

我使用eclipse-php-oxygen遇到了同样的问题 问题在于日食。 我已经安装了eclipse-php-luna-SR2-win32并测试了xdebug,它运行正常。

安装: XAMPP-win32-7.0.30-0-VCl 4-Installer.exe的 Java 8 Update 171

以下是我在php.ini上的设置:

[XDebug]
zend_extension = C:\xampp\php\ext\php_xdebug-2.6.0-7.0-vc14.dll
;zend_extension = C:\xampp\php\ext\php_xdebug-2.5.5-7.0-vc14.dll
;zend_extension = "c:\xampp\php\ext\php_xdebug-2.6.0-7.2-vc15.dll"
xdebug.remote_autostart = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "c:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_log = "c:\xampp\tmp\xdebug.txt"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "c:\xampp\tmp"
;36000 = 10h
xdebug.remote_cookie_expire_time = 36000

我希望这会有所帮助。

BR, 阿里

答案 13 :(得分:0)

我在窗户上,遮住氧气。花了相当长的时间后,我发现Debug Configuration的简单删除和重新创建有帮助。

答案 14 :(得分:0)

我也解决了这个问题。 使用zend_extension而不是扩展名。

zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"

答案 15 :(得分:0)

我在fedora发行版20 Heisenbug,php-ZendFramework2-Debug-2.3.9-1.fc20.noarch,php-pecl-xdebug-2.2.7-1.fc20.i686和eclipse版本中添加了同样的问题: Mars.1发布(4.5.1)。我使用了之前的答案,发现eclipse使用ipv6,我在eclipse.ini中为-Djava.net.preferIPv4Stack=true进行了更改。对于xdebug.ini也一样,但仍然无效,直到我发现我有2个xdebug.ini文件,/etc/php-zts.d/中有一个是错误的文件,而/etc/php.d/中有一个是; Enable xdebug extension module zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host="127.0.0.1" xdebug.remote_port=9000 xdebug.remote_handler="dbgp" xdebug.remote_mode=req xdebug.remote_autostart=1 xdebug.idekey= 使用的文件。阿帕奇。我修改它以包括以下设置

sudo service network restart

重新启动网络numpy.i,现在检测到断点,我可以按预期进行调试。

答案 16 :(得分:0)

对我来说简单的解决方案,当我新安装和配置的xdebug不能与PhpStorm一起使用时:我只是忘记在更新php.ini文件后重启apache。

答案 17 :(得分:0)

1-检查php.ini上的xdebug配置
2- eclipse-&gt; project-&gt; properties-&gt; phpDebug-&gt; 启用项目特定设置

phpDebugger-&GT; configurattion-&GT;端口 要么 widndow-&GT;优先 - &GT; PHP-&GT;调试 - &GT; installedDebuggers

3-widndow-&GT;优先 - &GT; PHP-&GT;

Interpreter-&GT;版本 executables-&GT; php-win.exe的路径
指出:对于每个调试库(xdebug,zend_debugger,...),您可以使用默认的php可执行文件。

4 - 您的应用程序服务器在80的不同端口上工作。 widndow-&GT;优先 - &GT; PHP-&GT; PHP服务器

答案 18 :(得分:0)

我遇到了同样的问题,其中一项修复了......

我在PHP.ini中删除了一个重复的zend_extension定义

或者更有可能我刚从这里升级到最新的xdebug版本: http://xdebug.org/download.php

(我正在运行XAMPP v1.7.1附带的xdebug)

这个开始了...尝试了所有不同版本的xdebug dll等...结果发现导致这个不起作用的是打开Expressions窗口......所以当你调试东西时保持关闭..你可以暂时添加一个手表,然后在“步骤”之前关闭表达式窗口......

虚假......

答案 19 :(得分:0)

如果您使用的是Eclipse,可能是为特定启动配置的 调试器 (请参阅调试器选项卡)是Zend Debugger,而不是XDebug。修复调试启动并重试。这解决了我的问题。

不幸的是我无法发布截图。但是,在Eclipse中,您可以访问: 调试配置&gt; PHP Web应用程序&gt;然后选择你的发布&gt; “调试器”选项卡&gt;使用Server Debugger下拉列表选择XDebug&gt;点击“应用”按钮,然后重试。