Rud*_*uch 24 php phpunit segmentation-fault
当我的开发箱(Linux Mint)上的PHPUnit测试正常失败时,它会在我的连续集成框(Centos)上导致"分段错误".两台机器都运行相同版本的PHPUnit.我的开发框运行PHP 5.3.2-1ubuntu4.9,CI为PHP 5.2.17.我宁愿放弃升级PHP作为最后的手段.
根据这个线程:PHPUnit得到分段错误 我已经尝试停用/重新安装Xdebug.我没有inclue.so安装.
在CI框中,我目前只有两个活动扩展:dom来自php-xml(phpunit需要)和memcache(我的框架需要),所有其他扩展都已关闭.
hak*_*kre 24
在cweiske建议的旁边,如果升级PHP不适合您,并且您无法找到段错误的来源,则可以使用调试器来查找更多信息.
您可以通过这种方式启动gdb来调试PHPUnit会话:
gdb --args php /usr/bin/phpunit quiz_service_Test.php
Run Code Online (Sandbox Code Playgroud)
然后输入r以运行程序和/或首先设置环境变量.
set env MALLOC_CHECK_=3
r
Run Code Online (Sandbox Code Playgroud)
您还可以考虑在系统上安装PHP的调试符号,以获得更好的调试结果.gdb会在启动时为您检查,并留下通知如何执行此操作.
Isa*_*aac 17
我遇到了PHPUnit segfaulting的问题,但很难找到答案,所以希望这可以帮助以后遇到同样问题的人.
PHPUnit是segfaulting,但仅限于:
过了一会儿,我意识到这是由于使用数据提供程序的测试失败,特别是对于传递带有大量递归引用的对象的数据提供程序.钟声最终消失了,我做了一些挖掘:问题是,当你使用数据提供程序并且测试失败时,PHPUnit会尝试为失败描述创建所提供参数的字符串表示,以告诉你失败的原因,但是当其中一个参数有一些无限递归时会出现问题.实际上,PHPUnit所做的PHPUnit_Framework_TestCase::dataToString()(在第1612行左右)打印出数据提供程序使用的所有参数print_r,当PHP尝试创建无限递归对象的字符串表示时会导致段错误.
我找到的解决方案是:
dataToString()我的测试基类,检查数据数组中的这些类型的对象(在我的情况下这是可能的,因为我知道这些对象是什么样的).如果对象存在,我返回一些特殊值,如果不是,我只是将它传递给父方法.我有类似的问题,并通过禁用garbge collactor
PHPStorm =>编辑配置=>解释器选项:-d zend.enable_gc = 0
或者,如果从命令行运行测试,可以尝试添加:
-d zend.enable_gc = 0
当您获得segfault时,请将PHP升级到最新版本.不仅是您的软件包管理器中的最新软件,还有php.net上的最新软件.如果它仍然是段错误,你确定问题还没有在PHP本身修复.不要试图摆脱旧版PHP中的段错误,因为它可能已经在较新版本中修复过了.
下一步是找出问题:让你的测试越来越小,直到你无法删除任何东西(但它仍然是段错误).如果你有这个,将测试移动到一个独立的php脚本,segfaults.现在,您可以在PHP错误跟踪器中找到错误的测试脚本.