Debug时,内存里怎么都是“烫烫烫烫烫烫”
2006-11-05 17:09
176 查看
在 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 为“葺”字符
/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 为“葺”字符
相关文章推荐
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- 为什么DEBUG的时候,内存里都是“烫烫烫烫烫烫烫烫烫……”呢?
- Debug Assertion Failed!问题怎么解决?
- 专题都是怎么构图的?
- 现在人们手机上玩的麻将和电玩城游戏都是怎么开发出来的
- 内存不足,无法运行Microsoft Excel 请关闭其他相应程序再试怎么办
- 内存中的堆与栈到底是怎么回事?
- 什么是内存泄露?遇到内存泄露该怎么解决?
- mac 显示set a breakpoint in malloc_error_break to debug 终端显示进程已完成怎么办?
- 倪光南:搞国产操作系统的都是百人小公司,怎么跟微软竞争?
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- nio 使用的都是直接内存吗?
- 高质量C++编程之(7.8 有了malloc/free 为什么还要new/delete ?7.9 内存耗尽怎么办?)
- android studio 真机调试 点击Run 都是Debug模式 修正方法
- malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!
- Debug流程控制工具条不见了怎么处理
- java 值传递跟引用传递在内存中怎么分配的
- 怎么检测内存泄露
- MyEclipse 不编译了,无论怎么更改保存, classes目录下都是空的.
- sql server 在占用服务器内存居高不下怎么办