我在使用远程调试时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>
'line条件调用返回异常'是否意味着什么?
答案 0 :(得分:33)
我遇到了这个问题并花了很多时间才找到答案。
在调试配置中,在服务器区域中,单击“配置”,转到“路径映射”,单击其中的路径,然后单击“编辑”,更改为“文件系统中的路径”并导航到正确的文件。
完成。
答案 1 :(得分:19)
我遇到了同样的问题,最后我发现我的php.ini缺少这两个重要设置:
xdebug.remote_autostart = "On"
xdebug.remote_enable = "On"
然后它完美无缺。
答案 2 :(得分:8)
XDebug使用NetBeans在我的Ubuntu Lucid框中运行良好,我的php.ini(/etc/php5/apache2/php.ini)中有zend_extension行。
我正在使用netbeans 6.9和PHP 5.2和xdebug 2.0.4-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
答案 3 :(得分:7)
来自http://xdebug.org/docs/install,“你应该忽略任何提示将”extension = xdebug.so“添加到php.ini - 这会导致问题。”
所以,这为我解决了这个问题:
在配置文件中,你加载xdebug扩展名(对我来说,对于php的CLI版本,即/etc/php5/cli/conf.d/xdebug.ini) - 不要指定
延长= xdebug.so
相反,请使用
的zend_extension = /路径/到/ Xdebug的/模块/ xdebug.so
(对我来说,这就像/usr/lib/php5/(...)/xdebug.so)
答案 4 :(得分:5)
我遇到了同样的问题,我的解决方案是将本地代码放在与远程代码相同的路径上。
在网络服务器上,代码位于路径:/var/www/dev01/app_name
本地代码位于我的主目录中:/home/me/projects/app_name
此配置导致我的IDE(Eclipse和Komodo)直接飞过断点。
将本地路径从/home/me/projects/app_name
更改为/var/www/dev01/app_name
解决了问题。
使用sshfs本地挂载远程文件系统使其更加容易。
答案 5 :(得分:4)
我刚刚使用Komodo经历过类似于safl上述评论的内容,但不确定它是否相关:
我使用zend_extension和Komodo设置了xdebug并且它工作正常,可以设置断点和xdebug_break(),但只能设置一些文件。其他人没有工作。
解决方案的方式是发生远程和本地路径的映射。事实证明,Komodo正在对路径名做一个区分大小写的比较,所以我的映射并不完全匹配。调试器逐步打开的文件位于正确的路径上,但我通过ide打开的文件有一个大写的驱动器,显然导致Komodo忽视。
答案 6 :(得分:3)
我尝试了所有这些解决方案无济于事。我很困惑,因为XDebug为我的一个项目工作但不是这个新项目。在比较配置属性后,我意识到了
项目属性&gt;来源&gt; Web root:
在新项目中将值设置为default value
,但在现有项目上设置为webroot
。所以,我浏览了项目的webroot并设置了该值。我测试了它,bada-bing,它有效。
答案 7 :(得分:2)
你完全确定你没有通过extension=xdebug.so
加载Xdebug吗?如果此行显示在php.ini
中(即它出现在phpinfo()
输出中等),Xdebug将加载,但如果以这种方式加载,则断点不起作用。 (它甚至可以连接到调试器客户端,并接受断点 - 它们永远不会被触发。)
我建议您注释掉zend_extension
行并查看它是否仍然加载 - 例如,您可能认为您正在通过/etc/php5/conf.d/xdebug.ini
加载Xdebug,但有些内容已添加到{{1}在你背后。
有关详细信息,请参阅this question & answer。
答案 8 :(得分:2)
我遇到了同样的事情,并且正在猛烈地撞击它一段时间。在某些时候,我还将ZendDebugger.so添加到我的PHP.ini中,这就是破坏Xdebug的原因。在我的php.ini中注释掉ZendDebugger.so行修复了它。
如果您没有使用ZendDebugger,您可能只是开始禁用其他Zend扩展,看看它是否是导致冲突的另一个扩展。
答案 9 :(得分:2)
我使用Eclipse并且还看了一会儿。 php.ini
中的所有内容都是正确的。
最后,我发现,Eclipse中的 调试器设置为ZEND-Debugger
。在我将其更改为XDEBUG
之后,它运行正常。
此致 约尔格
答案 10 :(得分: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
答案 11 :(得分:0)
要解决调试PHP CLI的问题,
将环境变量添加到〜/ .bashrc中(然后重新加载):
export PHP_IDE_CONFIG="serverName=www.yourservernameurl.com"
export XDEBUG_CONFIG="idekey=PHPSTORM"
(我使用phpstorm,但是您可以根据需要省略第二个)
答案 12 :(得分:0)
您是否可以在尝试使用Web IDE进行调试时提供完整的会话日志?
BTW使用Web IDE时,您通常不需要设置xdebug.idekey = webide,因为ide键是通过url参数自动分配的。
答案 13 :(得分: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
答案 14 :(得分: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,现在一切正常。
希望对您有所帮助;)
答案 15 :(得分:0)
我讨厌这些配置。当我知道lib Dephpugger时,我的生活发生了变化。
是否在终端中运行调试器(如Python的ipdb和Ruby的byebug)。 https://github.com/tacnoman/dephpugger 很容易使用。
答案 16 :(得分:0)
我不能对这篇文章发表评论。
我的问题的解决方案很像pitchandtone说。 Eclipce制作了错误的双路径映射项。不过我可以使用相对路径(即/ project / folder)。
答案 17 :(得分:0)
我正在尝试使用PhpStorm进行调试,但它并没有停留在某些断点处,而是在我尝试使用Google时可以找到的每个解决方案时开始忽略更多。
问题是在后台运行的多个分离的PHP进程实际上处理了我的请求。 PhpStorm并没有在断点处停止,因为我正在调试的过程没有接收到请求。 杀死这些流程为我解决了这个问题。
答案 18 :(得分:0)
路径中的异常符号也可能存在问题。例如,我通过路径找到了我的代码:
C:\[dev]\OpenServer\domains\...
我无法抓住任何东西,但在改变路径问题后消失了:
C:\dev\OpenServer\domains\...
所以即使是括号也很重要。
答案 19 :(得分:0)
说到路径,OSX文件系统不区分大小写,但xdebug似乎是。
在我的情况下,即使我使用/proj/test.php而不是/Proj/test.php运行脚本,一切似乎都有效。
当xdebug(或至少我目前的版本)检查断点时,检查区分大小写。如果为/Proj/test.php设置了断点,但脚本是通过/proj/test.php运行的,那么就没有匹配。
我的PHP包含路径也有类似的问题。路径包括/ proj -directory,这是错误的。运行代码工作,但由于断点是使用/ Proj设置的,因此它们没有被命中。
检查这是否是问题:
答案 20 :(得分:0)
我有一个类似的问题,并遇到一个帖子来解决问题。我的html表单(testform.html)调用了一个php脚本(runQuery.php),Netbeans无法在runQuery.php的设置断点处中断
通过在像这样的论坛上搜索检查php.ini和Netbeans中的所有配置设置后,我发现如果项目的索引文件是PHP文件,netbeans将仅在断点处中断。这非常重要,否则你将花费数小时试图弄清楚为什么断点不起作用。
在Netbeans中,进入文件/项目属性/运行配置,检查索引文件是否为PHP文件。在我的情况下,我将我的索引文件从testform.html更改为testform.php并且它工作正常,我能够突破断点。
答案 21 :(得分:0)
在我的情况下,问题只发生在一个项目中(我只能使用xdebug_break中断),而在其他项目中工作正常。
修复了以下文件: nbproject / private / private.properties : 并设置:
copy.src.files=false
当我创建项目时,我错误地选择了“复制源”选项。然后我手动移动项目并编辑其源路径(在“nbproject / project.properties”文件中),调试器仍然在寻找旧路径(在copy.src.target中设置)。
从技术上讲,修复此DEBUG问题的其他方法是重新创建nbproject目录(通过删除它并再次创建项目)。我想调试器应该可以正常启用“复制”选项(因为我从不使用它)。
我希望这可以提供帮助。
答案 22 :(得分:0)
我经常碰到这个问题,但从来没有找到问题的真正原因。
我通常会解决,
在构造实例和加载类的客户端代码中放置更多断点(因为看起来XDebug会因类加载问题而忽略一些断点)。您可以通过一些步骤来学习和了解这些位置的位置。
检查依赖项的源路径。 XDebug通过完整路径获取这些文件,您可以在断点面板上看到IDE如何处理它们。
答案 23 :(得分:-1)
还要确保文件在本地和远程同步,否则断点可能会落在无效区域,例如空行,它将无法正常工作。
还要确保您具有足够的权限。我试图通过NetBeans进行同步,但权限被拒绝
还要确保在启动调试器后正确设置浏览器中的URL。我的nbproject文件夹中有一个旧的URL。