41

我在使用远程调试时遇到 xdebug 没有在断点处停止的问题(通过命令行运行脚本时一切都很好)。它将在程序的第一行中断,然后退出,不捕获任何断点。

它曾经工作得很好,直到我转而使用 MacPorts for Apache 和 PHP。我已经尝试过多次重新编译它(有几个版本),但没有骰子。

我正在使用 PHP 5.3.1 和 Xdebug 2.1.0-beta3

我还尝试了至少 3 种不同的调试程序(MacGDBp、Netbeans 和 JetBrains Web IDE)。

我的 php.ini 设置如下所示:

[xdebug]
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.idekey=webide

当我记录调试器输出时,设置断点看起来像这样/;

<- breakpoint_set -i 895 -t line -f file:///Users/WM_imac/Sites/wm/debug_test.php -n 13 -s enabled -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="895" state="enabled" id="890660002"></response>

运行时,调试器将获取应用程序第一行的上下文,然后发送分离和停止消息。

但是,启动调试器时会输出此行。

<- feature_get -i 885 -n breakpoint_types -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_get" transaction_id="885" feature_name="breakpoint_types" supported="1"><![CDATA[line conditional call return exception]]></response>

“线路条件调用返回异常”是否意味着什么?

4

24 回答 24

34

我遇到了这个问题,花了很长时间才找到答案。

在您的调试配置中,在服务器区域中,单击配置,转到路径映射,单击那里的路径并单击编辑,更改为文件系统中的路径并导航到正确的文件。

完毕。

于 2011-01-13T03:04:46.993 回答
22

我有同样的问题,最后我发现我的 php.ini 缺少这两个重要的设置:

xdebug.remote_autostart = "On"
xdebug.remote_enable = "On"

然后它完美地工作了。

于 2010-11-01T18:35:00.733 回答
8

XDebug 在我使用 NetBeans 的 Ubuntu Lucid 机器中运行良好,而且我的 php.ini (/etc/php5/apache2/php.ini) 中确实有 zend_extension 行。

我正在使用带有 xdebug 2.0.4-2 的 netbeans 6.9 和 PHP 5.2

我在此处粘贴相关行,希望对您有所帮助:

zend_extension=/usr/lib/php5/20060613/xdebug.so

[debug]
; Remote settings
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey="netbeans-xdebug"

; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=1
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=

; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32

; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32
于 2010-08-16T08:32:56.397 回答
8

来自http://xdebug.org/docs/install ,“您应该忽略将“extension=xdebug.so”添加到 php.ini 的任何提示——这会导致问题。”

所以,这为我修复了它:

在配置文件中,您加载 xdebug 扩展(对我来说,对于 php 的 CLI 版本,即 /etc/php5/cli/conf.d/xdebug.ini) - 不要指定

扩展=xdebug.so

相反,使用

zend_extension=/path/to/xdebug/module/xdebug.so

(对我来说,这类似于 /usr/lib/php5/(...)/xdebug.so )

用于locate xdebug.so查找位置。

于 2010-03-11T11:33:08.663 回答
7

我遇到了同样的问题,我的解决方案是将本地代码与远程代码放在同一路径上。

例子

在网络服务器上,代码位于路径上:/var/www/dev01/app_name

本地代码位于我的主目录中:/home/me/projects/app_name

这种配置导致我的 IDE(Eclipse 和 Komodo)直接飞过断点。

将本地路径从 更改/home/me/projects/app_name/var/www/dev01/app_name解决了问题。使用 sshfs 在本地挂载远程文件系统会更容易。

于 2010-08-30T23:13:29.973 回答
4

我刚刚使用 Komodo 遇到了类似于 safl 上面的评论的事情,但不确定它是否相关:

我使用带有 Komodo 的 zend_extension 设置了 xdebug,它运行良好,可以设置断点和 xdebug_break(),但只能设置一些文件。其他人没有工作。

解决方案是远程和本地路径的映射发生的方式。事实证明,Komodo 正在对路径名进行区分大小写的比较,所以我的映射不太匹配。调试器通过逐步打开的文件位于正确的路径上,但我通过 ide 打开的文件有一个大写的驱动器号,这显然导致 Komodo 忽略。

于 2011-01-07T23:24:13.350 回答
3

我尝试了所有这些解决方案都无济于事。我很困惑,因为 XDebug 为我的一个项目工作,但不是这个新项目。在比较了配置属性后,我意识到

项目属性 > 源 > Web 根:

该值default value在新项目上设置为 a,但webroot在现有项目上设置为。因此,我浏览了项目的 webroot 并设置了该值。我测试了它,bada-bing,它有效。

在此处输入图像描述

于 2012-05-07T18:54:15.753 回答
2

你完全确定你没有通过加载 Xdebugextension=xdebug.so吗?php.ini如果此行出现在您的(即它出现在输出等)中, Xdebug 将加载phpinfo(),但如果以这种方式加载断点将不起作用。(它甚至会连接到调试器客户端,并接受断点——它们永远不会被触发。)

我建议您注释掉该zend_extension行并查看它是否仍然加载——/etc/php5/conf.d/xdebug.ini例如,您可能认为您正在通过 加载 Xdebug,但有些东西/etc/php5/apache2/php.ini在您背后添加了它。

有关更多信息,请参阅此问题和答案

于 2010-07-21T10:15:13.893 回答
2

我用的是Eclipse,也找了一阵子。里面的一切php.ini都是对的。

最后,我发现,在 Eclipse中,调试器是这样设置的ZEND-Debugger。在我更改它之后XDEBUG它工作正常。

问候乔尔格

于 2013-02-15T07:56:03.457 回答
2

我遇到了同样的事情,我用头撞了一会儿。在某些时候,我还将 ZendDebugger.so 添加到我的 PHP.ini 中,这就是破坏 Xdebug 的原因。注释掉我的 php.ini 中的 ZendDebugger.so 行修复了它。

如果您没有使用 ZendDebugger,您可能只是开始禁用其他 Zend 扩展并查看它是否是另一个导致冲突的扩展。

于 2011-08-15T16:49:04.407 回答
2

我也有同样的问题。我得到了加载 dll 文件的解决方案,我们应该使用 zend_extension。

zend_extension=php_xdebug-2.5.5-5.6-vc11.dll 

休息配置将是

xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
于 2018-05-19T18:10:56.957 回答
0

我有一个类似的问题,并遇到了一个帖子来解决这个问题。我的 html 表单 (testform.html) 正在调用 php 脚本 (runQuery.php),而 Netbeans 无法在我的 runQuery.php 中设置的断点处中断

通过在类似这样的论坛上搜索检查 php.ini 和 Netbeans 中的所有配置设置后,我发现如果项目的索引文件是 PHP 文件,netbeans 只会在断点处中断。这非常重要,否则您将花费​​数小时试图找出断点不起作用的原因。

在 Netbeans 中,进入文件/项目属性/运行配置并检查索引文件是否为 PHP 文件。就我而言,我将索引文件从 testform.html 更改为 testform.php 并且它起作用了,我能够在断点处中断。

于 2014-03-09T13:09:19.087 回答
0

就我而言,问题仅发生在一个项目中(我只能使用 xdebug_break 中断),而在其他项目中工作正常。

已修复编辑文件:nbproject/private/private.properties:并设置:

copy.src.files=false

当我创建项目时,我错误地选择了“复制源”选项。然后我手动移动了项目并编辑了它的源路径(在“nbproject/project.properties”文件中),调试器仍在寻找旧路径(在 copy.src.target 中设置)。

所以从技术上讲,解决这个 DEBUG 问题的其他方法是重新创建 nbproject 目录(通过删除它并再次创建项目)。我猜调试器应该可以在启用“复制”选项的情况下正常工作(因为我从不使用它)。

我希望这会有所帮助。

于 2011-11-09T04:10:06.420 回答
0

我不时遇到这个问题,但一直无法找出问题的真正原因。

我通常通过以下方式解决,

  1. 在构建实例和加载类的客户端代码上放置更多断点(因为 XDebug 似乎会因为类加载问题而忽略一些断点)。您可以通过一些步骤来了解并了解这些位置的位置。

  2. 检查依赖项的源路径。XDebug 通过完整路径获取这些文件,您可以在断点面板中查看 IDE 如何处理它们。

于 2010-07-18T19:14:57.953 回答
0

您能否在尝试使用 Web IDE 进行调试时提供完整的会话日志?

顺便说一句,在使用 Web IDE 时,您通常不需要设置 xdebug.idekey=webide 因为 ide 密钥是通过 url 参数自动分配的。

于 2010-03-12T07:25:37.247 回答
0

在路径方面,OSX 文件系统不区分大小写,但 xdebug 似乎是。

在我的情况下,即使我使用 / p roj/test.php 而不是 / P roj/test.php 运行脚本,一切似乎都可以正常工作。

当 xdebug(或至少我当前拥有的版本)检查断点时,检查区分大小写。如果为 /Proj/test.php 设置了断点,但脚本是通过 /proj/test.php 运行的,则不匹配。

PHP 包含路径也有类似的问题。路径包含 /proj 目录,这是错误的。运行代码有效,但由于断点是使用 /Proj 设置的,因此它们没有被命中。

要检查这是否是问题:

  • 启用日志记录,-dxdebug.remote_log=/tmp/remote.log
  • 设置断点时检查日志中的确切路径
  • 比较正在使用的 PHP 解释器的路径,例如: echo dirname(__FILE__) ;
于 2015-02-04T11:24:59.920 回答
0

要修复调试 PHP CLI 的问题,

将环境变量添加到 ~/.bashrc (然后重新加载):

export PHP_IDE_CONFIG="serverName=www.yourservernameurl.com"
export XDEBUG_CONFIG="idekey=PHPSTORM"

(我用的是phpstorm,但你可以根据需要省略第二个)

于 2020-01-15T15:00:52.443 回答
0

只是为了快速更新这个主题,我的新开发设置遇到了类似的问题,这显然是一个版本问题:至少 PHP 版本 7.1.20-1+ubuntu16.04.1+deb.sury.org+1 xdebug 2.7 .1 没用:

它成功执行了第一个请求(我在 Symfony 项目中,所以它是 router.php),但是当我的 IDE(PHPSTORM)向它询问另一个断点时,它就崩溃了,所以没有断点日志,当然我的页面也没有加载 ^ ^。

我想通了看日志(在 php.ini 中,您可以使用 xdebug.remote_log 参数对其进行自定义)。希望我将 xdebug 回滚到 2.6.1,现在一切都好。

希望它可以帮助某人;)

于 2019-04-10T22:26:51.333 回答
0

路径中的异常符号也可能存在问题。例如,我的代码按路径定位:

C:\[dev]\OpenServer\domains\...

而且我无法捕捉到任何东西,但是在更改路径后问题消失了:

C:\dev\OpenServer\domains\...

所以即使是括号也很重要。

于 2016-05-20T15:38:02.000 回答
0

就我而言,当我将 zend_extension 项从 [xdebug] 上方移动到 [xdebug] 下方时,它运行良好。

;zend_extension = "D:\wamp\bin\php\php5.6.25\ext\php_xdebug-2.5.4-5.6-vc11-
x86_64.dll"
[xdebug]
zend_extension ="D:/wamp/bin/php/php5.6.25/zend_ext/php_xdebug-2.4.1-5.6-vc11.dll"

xdebug.auto_trace = On
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.profiler_enable = On
xdebug.profiler_enable_trigger = On
于 2019-08-18T09:41:34.927 回答
0

我不能评论一个帖子,因此这个帖子。

我的问题的解决方案很像 pitchandtone 说的。Eclipce 制作了错误的双路径映射项。不过我可以使用相对路径(即/project/folder)。

于 2016-10-26T10:18:13.010 回答
0

我试图使用 PhpStorm 进行调试,但它并没有在某些断点处停止,而是开始忽略更多,因为我正在尝试使用 Google 找到的每一个解决方案。

问题是在后台运行了多个分离的 PHP 进程,这些进程实际上处理了我的请求。PhpStorm 没有在断点处停止,因为我正在调试的进程没有收到请求。杀死这些进程为我解决了这个问题。

于 2016-09-06T14:07:17.040 回答
0

我讨厌这些配置。当我知道 lib Dephpugger 时,我的生活发生了改变。

是一个在终端中运行的调试器(如 Python 的 ipdb 和 Ruby 的 byebug)。 https://github.com/tacnoman/dephpugger 非常好用。

于 2017-03-12T17:21:20.747 回答
-1

还要确保文件在本地和远程同步,否则您的断点可能会落在无效区域,例如空行,它将无法工作。

还要确保您有足够的权限。我尝试通过 NetBeans 进行同步并获得权限被拒绝

还要确保在启动调试器后正确设置浏览器中的 URL。我的 nbproject 文件夹中有一个旧 URL。

于 2020-04-23T15:25:45.783 回答