调试经验谈-release版特有的问题

c++的程序,都会有release和debug版,主要是优化选项和运行时检测不同。我们有时会遇上在debug版运行正常,release版运行错误的情况

根据我的经验,主要是两个原因,一个是变量没有初始化,导致debug和release版的初始值不同,另外就是内存布局不同,导致一些内存溢出或野指针的问题表现不同。

  检查的方法,因为release的程序往往不好调试,所以先通过log缩小问题范围,看看从哪句开始两个版本结果就不同了,然后再细细检查。

1 对于初始化的问题,最直接的方法就是检查程序,看看是不是有初始化遗漏的情况。把漏掉的都加上,看看是不是还不一致。特别的,如果加了输出log的语句,问题就没了,那基本可以肯定在log之后的函数调用有局部变量初始化的问题。

2 对于溢出的问题,  当然是要通过log检查每次内存拷贝的缓冲区大小和需要考的字节数,基本都能找出问题了。

3 对于野指针的问题,问题就是一块内存被过早的释放了,然后被重新申请到后修改了。如果代码范围小,还是仔细检查代码,看看是不是有获取了一块内存,然后原来那块内存被释放,或者提供内存的对象被析构了的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值