Advertisement

C++编译器支持检测越界行为的机制

阅读量:

前天帮助同事审阅了一个程序运行情况如下:该程序在完成全部代码执行后突然发生Segment Fault(段错误),由于当时工作事务繁忙无法深入检查因此主要对几个关键节点进行了粗略浏览未发现明显的错误或问题

当时代码的主要关注点集中在管道通信方面, 就特别关注了管道相关的问题. 没有深入阅读每一个细节, 花了大约15分钟却未能找到任何线索. 这一发现让我充满了好奇与探索的动力, 于是乎我下定决心全面细致地检查一遍所有的代码. 结果很快就找到了问题所在, 原来在程序的开始的地方有如下的代码:

有没有注意到?有没有注意到,在初始化w_buf的过程中出现了内存溢出?然而,并非所有内存溢出会直接导致核心崩溃在溢出的代码路径上。比如在这个案例中,在程序返回后才会抛出信号11(Segmentation fault)错误。返回后的核心位置通常令人困惑难以定位有时候不容易察觉而gdb也无法显示堆栈信息

如果不小心操作就会被 prone to 小规模故障,
很多 backend 稨程员编写几行代码,
通常只需 10 秒左右。
一旦出现问题就会被发现出现故障后不得不进行深入分析,
有时会耗时较长,
无需过分

全部评论 (0)

还没有任何评论哟~