Debug时,内存里怎么都是“烫烫烫烫烫烫”
来源:互联网 发布:联通网络测试 编辑:程序博客网 时间:2024/06/10 15:19
在 Debug 模式下会自动加上 /GZ 编译选项,它可以帮助捕获内存错误。
/GZ 选项会做以下这些事
(1) 初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存,例如 new ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问),其中括号中的词是微软建议的助记词。这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。
(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性。(防止原形不匹配)
(3) 函数返回前检查栈指针,确认未被修改。(防止越界访问和原形不匹配,与第二项合在一起可大致模拟帧指针省略FPO)
“烫”字的MBCS编码为“CCCC”,而用 /GZ 选项对自动变量会用“0xCC”初始化,连续的“0xCC”将被误读成“烫”字符。
CC是int 3h的机器码,这是一个中断指令.debug版本的内存中填充这个指令就是让程序出现错误的时候(非法跳转)能停下来.方便调试
CDCD 为“屯”字符 DDDD 为“葺”字符
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/weixing979/archive/2006/11/05/1367969.aspx
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- 为什么DEBUG的时候,内存里都是“烫烫烫烫烫烫烫烫烫……”呢?
- Acrobat里打开时怎么快速转到上次看的位置,每次都是从0页开始,很麻烦
- 在SSH中的DAO包里的内容大家都是怎么写的??
- 你们都是怎么了?
- 怎么用代码里打印程序所占用的内存
- web工程无论怎么清理运行时都是404
- kernel里initcall debug
- vs2008 debug时查看内存步骤
- debug怎么用
- eclipse怎么debug调试
- 钱都是怎么赚的
- 都是内存惹的祸
- 【内存管理】:谁应该写在viewDidUnload里,谁应该写在dealloc里,arc之后viewDidUnload怎么用
- 【内存管理】:谁应该写在viewDidUnload里,谁应该写在dealloc里,arc之后viewDidUnload怎么用
- 【内存管理】:谁应该写在viewDidUnload里,谁应该写在dealloc里,arc之后viewDidUnload怎么用
- [DEBUG]内存泄露调试
- Flex 将一些信息复制到系统剪贴板上
- Downloads Collection
- 对于拷贝构造函数中参数是引用的理解
- 动态添加删除ExpandableListView的item的例子
- 10-13心情
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- gggg
- 网页上显示有行线的文字(文字有下线)
- 文件操作
- 完成端口中的单句柄数据结构与单IO数据结构的理解与设计
- flex里播放声音的方法
- 乱码之解决法办
- 爱上女人的长统靴
- MSYS中ls显示中文乱码及访问其他驱动器