`
izuoyan
  • 浏览: 9207526 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

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

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

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics