最近几年比较倾心于github+evernote学习方式,所以很少来csdn记录自己学习所得了,今天就堆栈溢出问题写一篇解决办法。
公司司产品经过这三年的迭代已经非常复杂了,代码量超过10万,而且混杂了来自韩国,美国,台湾,北京好几个团队的贡献,加上跨现流行几大移动平台(android, ios)。维护,优化和定位bug已经远不如以前容易了。所以常常借助了比较的工具平台(valgrind, cpplint, intel vtunes)。
上周jekins日常做持续继承的时候报告一个堆栈溢出的问题。问题出在delete某一class实例的时候发生了堆栈溢出。这个class是由另外团队开发,代码量非常大且算法复杂,内部代码细节我们一直没有去读过。一开始通过vs debug方式很久没有找到头绪,因为一旦是堆栈溢出后,函数返回跳转就会出错,很难有正确的堆栈信息让你去排查问题。
后来我想到很久没有用的内存断点,刚好在windows平台可以借助CRT定位了。
问题分析步骤如下(推荐在windows debug模式):
#define BUFFER_SIZE 8
class Bug {
public:
Bug() {
buffer_ = new char[BUFFER_SIZE];
memset(buffer_, 0x0, BUFFE