V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lijinma
V2EX  ›  程序员

PHP 如何才能够出现 segment fault?需要如何配置

  •  
  •   lijinma · 2016-04-22 10:29:04 +08:00 · 2463 次点击
    这是一个创建于 2932 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想学习下 core dump 的东西,看了 Laruence 的博客:

    http://www.laruence.com/2011/06/23/2057.html

    脚本

    function recurse($num) {
          recurse(++$num);
    }
     
    recurse(0);
    

    但我现在 PHP 如果内存限制了就出现如下报错:

    PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 130968 bytes)
    

    如果把内存改成不限制,这个脚本会一直吃内存,不会爆栈。

    请问,如何设置才能 segment fault?

    操作系统:Mac OS 10.11.1

    22 条回复    2016-04-22 11:46:00 +08:00
    lijinma
        1
    lijinma  
    OP
       2016-04-22 10:36:22 +08:00
    - . - 求助。
    msxcms
        2
    msxcms  
       2016-04-22 10:42:45 +08:00   ❤️ 1
    因为这个是 PHP 的 Bug ,你找个有这个 Bug 的版本就行了
    kn007
        3
    kn007  
       2016-04-22 10:44:19 +08:00 via Android
    拿 php7 配置 igbinary7 就可以了
    shiny
        4
    shiny  
       2016-04-22 10:47:15 +08:00
    前几天就遇到过,可惜很难重现
    kn007
        5
    kn007  
       2016-04-22 10:49:25 +08:00 via Android
    等你 core dump ,鸟哥会告诉你被内存跑花了,要用 valgrind 。。。


    以下鸟哥发给我的:
    或者这么说吧, 我要用 valgrind 跑, 看看有没有什么信息可以获取
    lijinma
        6
    lijinma  
    OP
       2016-04-22 10:50:22 +08:00
    @msxcms 可以详细说一下吗? 多谢。
    lijinma
        7
    lijinma  
    OP
       2016-04-22 10:52:25 +08:00
    @kn007 就是说我无法生成一个因为 php segmentfault 的 core dump 吗?
    kn007
        8
    kn007  
       2016-04-22 10:53:46 +08:00 via Android
    kn007
        9
    kn007  
       2016-04-22 10:55:28 +08:00 via Android
    @lijinma 可以的,但是环境复杂,应用复杂的话,通过 segmentfault 的 core dump 看不出问题在哪。


    鸟哥的意思就是说你最好有段简短的测试代码才行。 coredump 才有意义。但最终还是用 valgrind 好定位问题。
    lijinma
        10
    lijinma  
    OP
       2016-04-22 11:00:03 +08:00
    @kn007 我上面那段递归的代码不可以吗?
    kn007
        11
    kn007  
       2016-04-22 11:02:05 +08:00 via Android
    @lijinma 这么简短没有问题😄,但是我不知道你这段能不能触发
    lijinma
        12
    lijinma  
    OP
       2016-04-22 11:08:43 +08:00
    @kn007 我的问题就是没触发啊。。

    我的问题就是:如何触发。

    看鸟哥的例子,这个是可以触发的,但是肯定有些配置。
    kn007
        13
    kn007  
       2016-04-22 11:12:37 +08:00 via Android
    @lijinma 下个 php5.2 试试
    kn007
        14
    kn007  
       2016-04-22 11:14:02 +08:00 via Android
    @lijinma 没留意你非要用这个脚本来实现 segmentfault 。
    php7 可以用上面那个获得 segmentfault
    lijinma
        15
    lijinma  
    OP
       2016-04-22 11:15:12 +08:00
    @kn007 - 。- 哈哈,你的例子好复杂。。。
    kn007
        16
    kn007  
       2016-04-22 11:16:04 +08:00 via Android
    Jan 06 2011 PHP5.3.5 & PHP5.2.17
    Mar 17 2011 PHP5.3.6
    Aug 18 2011 PHP5.3.7
    Aug 23 2011 PHP5.3.8

    你可以编一个 5.3.5 试试
    lijinma
        17
    lijinma  
    OP
       2016-04-22 11:37:00 +08:00
    @kn007 我是 5.6.19

    想要 core dump 难道编译的时候必须是 debug 模式吗?
    kn007
        18
    kn007  
       2016-04-22 11:38:08 +08:00 via Android
    @lijinma 我很想说 废话。。。
    肯定要 debug 啊。。。
    kn007
        19
    kn007  
       2016-04-22 11:38:45 +08:00 via Android   ❤️ 1
    不 debug 貌似也可以,但是看不到错误
    msxcms
        20
    msxcms  
       2016-04-22 11:41:10 +08:00   ❤️ 1
    @lijinma 正常使用是不会出现 segmentation fault 的,出现了说明是 PHP Bug 。鸟哥举例之后,这个 Bug 也修好了,你得找个旧版去试。
    lijinma
        21
    lijinma  
    OP
       2016-04-22 11:42:29 +08:00
    @msxcms 多谢,终于明白你的意思了。。真心感谢,纠结了几个小时。
    lijinma
        22
    lijinma  
    OP
       2016-04-22 11:46:00 +08:00
    @kn007 多谢,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   871 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:20 · PVG 03:20 · LAX 12:20 · JFK 15:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.