有时候写一个程序,debug的时候没有问题,但是release的程序却运行有问题,而且release的程序又不能调试,要找到错误之处非常麻烦。
其实debug和release模式没有什么本质的区别,只不过是编译选项的不同。默认release不会在程序中加入调试有关的信息,而且会进行一定的优化,比如把什么变量弄成寄存器类型,比如释放不用的内存等。当然编译选项可以自己设置。
雅乐网遇到过这个问题,总结了一些,出现debug和release运行结果不一致的原因大概有这么几个:
1.变量没有初始化
由于debug的时候一般没有初始化的变量编译器也会自动初始化,但是release后就不一定了。虽然有时未初始化变量没有用到,但还是会导致奇怪的问题,这种情况下要检查一下,最好每个变量都手动初始化。
特别要注意的是结构体,例如一个链表,如果有的节点中结构体的某个域没有用到没有赋值,可能也会导致这个问题,可以在结构体内存分配后使用memset将结构体清零。
2. 数组或指针访问越界
一般debug的时候编译器会提供一个对错误较为宽松的条件,数组两边可能有保护区域,而在release模式下越界可能会修改到程序的其他内容。