IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

无限递归导致 Segmentation fault

qingbo.blog 2012-03-04 20:33:00 累计浏览 3,429 次
本机暂存

    某服务器上一个 cron job 是 shell 脚本调用 Java 程序,最近老是报 Segmentation fault, 每次看见此信息

    /bin/sh: line 1: 4285 Segmentation fault java ...

    总觉得无处下手,bash 的问题?Java 版本不对?信息量太少了。其实遇到这种事情不能谎,表面上没有信息一定要挖出信息来。今天仔细一看,这个脚本把标准输出重定向到一个日志文件去了,于是去看日志。这个程序的主体是对一个信息列表做循环,恰好在每个循环的关键部分开始前、结束后都会写一条日志。其目的是为了计时,不过正是这两条日志让我很快找到了错误缘由,因为发现日志文件的末尾只有一个开始前的,说面在这个循环的处理过程里面发生了 Segmentation fault.

    找出程序的源代码,发现循环里面调用的方法有一个是递归的,情况就开始明朗了,猜测就是递归无法终止导致 stack overflow,segmentation fault. 果然,根据日志里最后一行日志中记录的真实数据,发现这条数据是有问题的,会导致此方法无限递归。

    Wikipedia 的 Segmentation fault 词条里有一节是 "Common causes", 我这次遇到的就是最后一条。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,895)
  2. Bash的模式和配置文件加载 (累计阅读 24,410)
  3. Java开发岗位面试题归类汇总 (累计阅读 22,157)
  4. android 开发入门 (累计阅读 19,529)
  5. 28个Unix/Linux的命令行神器 (累计阅读 16,791)
  6. 我常用的主机监控shell脚本 (累计阅读 13,434)
  7. 我的PHP,Python和Ruby之路 (累计阅读 13,149)
  8. HashMap解决hash冲突的方法 (累计阅读 12,654)
  9. 100个常用的linux命令 (累计阅读 11,607)
  10. Linux命令行里的“瑞士军刀” (累计阅读 11,587)