利用内存断点(数据断点)结合windows CRT 定位堆栈溢出问题

本文介绍了如何利用内存断点和Windows CRT在Windows平台上定位和解决堆栈溢出问题。通过分析内存分配时的标记、设置数据断点,以及在程序运行过程中中断,有效地定位到问题代码,帮助修复复杂项目中的内存管理问题。
摘要由CSDN通过智能技术生成

最近几年比较倾心于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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值