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

2016-04-22 10:29:04 +08:00
 lijinma

想学习下 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

2478 次点击
所在节点    程序员
22 条回复
lijinma
2016-04-22 10:36:22 +08:00
- . - 求助。
msxcms
2016-04-22 10:42:45 +08:00
因为这个是 PHP 的 Bug ,你找个有这个 Bug 的版本就行了
kn007
2016-04-22 10:44:19 +08:00
拿 php7 配置 igbinary7 就可以了
shiny
2016-04-22 10:47:15 +08:00
前几天就遇到过,可惜很难重现
kn007
2016-04-22 10:49:25 +08:00
等你 core dump ,鸟哥会告诉你被内存跑花了,要用 valgrind 。。。


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


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

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

看鸟哥的例子,这个是可以触发的,但是肯定有些配置。
kn007
2016-04-22 11:12:37 +08:00
@lijinma 下个 php5.2 试试
kn007
2016-04-22 11:14:02 +08:00
@lijinma 没留意你非要用这个脚本来实现 segmentfault 。
php7 可以用上面那个获得 segmentfault
lijinma
2016-04-22 11:15:12 +08:00
@kn007 - 。- 哈哈,你的例子好复杂。。。
kn007
2016-04-22 11:16:04 +08:00
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
2016-04-22 11:37:00 +08:00
@kn007 我是 5.6.19

想要 core dump 难道编译的时候必须是 debug 模式吗?
kn007
2016-04-22 11:38:08 +08:00
@lijinma 我很想说 废话。。。
肯定要 debug 啊。。。
kn007
2016-04-22 11:38:45 +08:00
不 debug 貌似也可以,但是看不到错误
msxcms
2016-04-22 11:41:10 +08:00
@lijinma 正常使用是不会出现 segmentation fault 的,出现了说明是 PHP Bug 。鸟哥举例之后,这个 Bug 也修好了,你得找个旧版去试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX