远程debugging不会停在断点处
我在使用远程debugging的时候遇到了一个xdebug问题,在断点处没有停止(当通过命令行运行脚本时,一切正常)。 它会在程序的第一行中断,然后退出,而不是捕捉任何断点。
它曾经工作得很好,直到我切换到Apache和PHP使用MacPorts。 我试过几次重新编译(有几个版本),但没有骰子。
我使用PHP 5.3.1和Xdebug 2.1.0-beta3
我也尝试了至less3个不同的debugging程序(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
而当我loggingdebugging器的输出时,设置一个断点看起来像这样/;
<- 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>
运行时,debugging器将获得应用程序第一行的上下文,然后发送分离和停止消息。
但是,启动debugging器时会输出此行。
<- 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>
“行条件调用返回exception”是什么意思?
我有这个问题,花了很多时间find答案。
在您的debuggingconfiguration中,在服务器区域中,单击configuration,转到path映射,单击其中的path,然后单击编辑,切换到文件系统中的path并导航到正确的文件。
完成。
我有同样的问题,最后我发现我的php.ini是缺less这两个重要的设置:
xdebug.remote_autostart = "On" xdebug.remote_enable = "On"
然后它完美的工作。
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
从http://xdebug.org/docs/install ,“你应该忽略任何提示添加”扩展= xdebug.so“到php.ini – 这将导致问题。”
所以,这个对我来说是固定的:
在configuration文件中,加载xdebug扩展(对于我来说,对于CLI版本的php,这是/etc/php5/cli/conf.d/xdebug.ini) – 不指定
延长= xdebug.so
相反,使用
的zend_extension = /path/到/ Xdebug的/模块/ xdebug.so
(对我来说,这是像/usr/lib/php5/(…)/xdebug.so)
我有同样的问题,对我来说,解决scheme是本地代码在远程代码相同的path。
例
在networking服务器上,代码位于path: /var/www/dev01/app_name
本地代码位于我的主目录: /home/me/projects/app_name
这个configuration导致我的IDE(Eclipse和Komodo)直接跳过断点。
将本地path从/home/me/projects/app_name
更改为/var/www/dev01/app_name
修复了问题。 使用sshfs在本地安装远程文件系统使得它更容易。
我刚刚经历了一些类似于上面使用Komodo的safl的评论,但不知道是否相关:
我使用zend_extension与Komodo设置了xdebug,它可以完美的工作,可以设置断点和xdebug_break(),但只有一些文件。 其他人没有工作。
解决scheme是通过远程和本地path的映射。 事实certificate,科莫多在path名称上做了区分大小写的比较,所以我的映射不太匹配。 debugging器打开的文件在正确的path上,但是我通过ide打开的文件有一个大写的驱动器盘符,这显然导致科莫多忽略。
我尝试了所有这些解决scheme无济于事。 我很困惑,因为XDebug为我的一个项目工作,但不是这个新项目。 在比较configuration属性之后,我意识到了
项目属性>来源> Web根目录:
该值在新项目上设置为default value
,但在现有项目上设置为webroot
。 所以,我浏览了该项目的webroot并设置了该值。 我testing了它,bada-bing,它工作。
你完全确定你没有通过extension=xdebug.so
加载Xdebug吗? 如果这行出现在你的php.ini
Xdebug会加载(例如,它出现在phpinfo()
输出等等)),但如果以这种方式加载,断点不起作用。 (它甚至会连接到debugging器客户端,并接受断点 – 他们只是从来没有被触发。)
我build议你注释掉zend_extension
行,看看它是否仍然被加载 – 例如,你可能认为你正在通过/etc/php5/conf.d/xdebug.ini
加载Xdebug,但是有东西把它加到了/etc/php5/apache2/php.ini
背后。
有关更多信息,请参阅此问题和答案 。
我碰到了同样的东西,一会儿就撞上了我的头。 在某些时候,我还将ZendDebugger.so添加到了我的PHP.ini中,这就是破解Xdebug的原因。 在我的php.ini中注释掉ZendDebugger.so行,修正了它。
如果你不使用ZendDebugger,你可能会开始禁用其他的Zend扩展,看看是否是另一个引起冲突的扩展。
我使用Eclipse,也看了一会儿。 在php.ini
所有东西都是正确的。
最后,我发现, 在Eclipse中 ,debugging器被设置为ZEND-Debugger
。 我将其更改为XDEBUG
它工作正常。
问候Joerg
您可以在尝试使用Web IDE进行debugging时提供完整的会话日志吗?
顺便说一句,使用Web IDE时,通常不需要设置xdebug.idekey = webide,因为ide键是通过url参数自动分配的。
我不时遇到这个问题,从来没有find问题的真正原因。
我通常通过解决,
-
在构造实例的客户端代码中放置更多的断点并加载类(因为看起来像XDebug将由于类加载问题而忽略一些断点)。 您可以通过一些插件了解并了解这些位置在哪里。
-
检查依赖项的源path。 XDebug通过它们的完整path来获取这些文件,你可以看到你的IDE在断点面板上如何处理它们。
在我的情况下,问题只发生在一个项目(我只能用xdebug_break破解),而在其他项目中工作正常。
它修复了编辑文件: nbproject / private / private.properties :并设置:
copy.src.files=false
当我创build项目时,我错误地select了“复制源”选项。 然后,我手动移动项目,并编辑其源path(在“nbproject / project.properties”文件),debugging器仍在寻找旧path(在copy.src.target中设置)。
所以在技术上,解决这个DEBUG问题的其他方法是重新创buildnbproject目录(通过删除它并重新创build项目)。 我想这个debugging器应该可以正常工作,并且启用“复制”选项(因为我从来没有使用它)。
我希望这可以帮助。
我有类似的问题,并find一个职位来解决这个问题。 我的html表单(testform.html)调用了一个php脚本(runQuery.php),Netbeans不能在我的runQuery.php
在php.ini和Netbeans中查找所有configuration设置后,我发现如果项目的索引文件是PHP文件,netbeans只会在断点处断开。 这是非常重要的,否则你会花几个小时试图弄清楚为什么断点不起作用。
在Netbeans进入文件/项目属性/运行configuration,并检查索引文件是一个PHP文件。 在我的情况下,我把我的索引文件从testform.html更改为testform.php,它的工作,我能够突破断点。
说到path,OSX文件系统不区分大小写,但似乎是xdebug。
在我的情况下,即使我正在使用/ p roj / test.php而不是/ P roj / test.php来运行脚本,一切似乎都能正常工作。
当xdebug(或者我现在使用的版本)正在检查断点时,检查区分大小写。 如果断点设置为/Proj/test.php,但脚本通过/proj/test.php运行,则不匹配。
我也有一个类似的PHP包含path的问题。 path包含/ proj -directory,这是错误的。 运行代码的工作,但由于断点设置使用/ Proj,他们没有被击中。
要检查这是否是问题:
- 启用日志logging,-dxdebug.remote_log = / tmp / remote.log
- 检查设置断点时日志中的确切path
- 比较PHP intepreter正在使用的path,例如:echo dirname(__ FILE__);
path中的exception符号也可能存在问题。 例如,我有我的代码位于path:
C:\[dev]\OpenServer\domains\...
而且我什么也抓不住,但是改道后问题消失了:
C:\dev\OpenServer\domains\...
所以即使括号很重要。
我正在尝试使用PhpStorm进行debugging,但是它并没有停止在某些断点处,并开始忽略,因为我正在尝试使用Googlefind的每一个解决scheme。
问题是在后台运行了多个分离的PHP进程 ,实际上处理了我的请求。 PhpStorm没有停止在断点,因为我正在debugging的过程没有收到请求。 杀死这些进程为我解决了这个问题。
所以我不能评论这篇文章。
我的问题的解决scheme很像pitchandtone说的。 Eclipce做了错误和双重path映射项目。 不过,我可以使用相对path(即/项目/文件夹)。
我讨厌这些configuration。 当我知道Dephpugger的时候,我的生活发生了变化。
是一个debugging器运行在terminal(如ipdb for Python和byebug for Ruby)。 https://github.com/tacnoman/dephpugger非常容易使用。;