栈溢出导致的core dump的定位------千年等一回

        某服务在跑的时候, 从来没有core dump过, 某次, core dump了。 老大收到core dump告警后, 在群里贴了一下, 我开始着手定位。 这是个低概率的core dump, 重现原来问题几乎没有可能。

        那就去看core吧, gdb xxx core一下发现, 程序core在一个字符串处理的地方, 但是,  无法进一步知道更具体的原因。 为了简便起见, 我对原来的函数进行变形和简化:

// linux 环境哦 !!!

#include 
#include 
using namespace std;

void fun(const string &s)
{
	char buf[s.size() + 1];
	string str;
}

int main() 
{
	int len = 100;
	string s(len, 'a');
	fun(s);

	return 0;
}
        确实看不出什么问题, 于是, 我自己构造场景来产生core,  发现, 比如当len = 10000000时候, 程序必然core(len的长度一般不可能这么长, 只有极端情况下才会有这么长), core的原因是栈溢出, 用gdb分析一下就知道, 出现了out of bound。 于是, 就定位到问题了, 定到问题后, 处理起来就很简单了。 

        不多说。






你可能感兴趣的:(s2:,软件进阶,s2:,Linux杂项,s2:,后台开发,s2:,活捉Bug)