循迹追踪令人头秃的Crash,十倍程序员的Debug日常(2)
作者|陶建辉 原文首发于:循迹追踪令人头秃的Crash 我们写 C 程序,经常碰到 Crash,绝大部分情况下都是空指针或野指针造成,从 call stack 来看,一般很容易找出问题。但是有一类 Crash 很难 debug,那就是内存溢出。溢出的部分的内存空间正好覆盖另外一个线程访问的数据(比如一个结构体),那么另外一个线程读取这块数据时,获取的数据就是无效的,往往导致不可预见的错误,甚至 Crash。但因为造成数据溢出的线程已经离开现场,导致问题很难定位。这是我在 2020 年 5 月写的一篇内部博客,以我当时碰到的一个错误为例,将解决这类问题的方法分享出来,供大家参考,举一反三。 具体问题 在feature/query分支上,在community仓库,执行以下脚本,出现Crash。 ./test.sh -f general/parser/col_arithmetic_operation.sim 重现问题 我登录到指定的机器,查看了 core dump, 确实如此。Call Stack 截图如下: 第一步:看哪个地方 crash。是 shash.c:250 行,使用 GDB...