日期:2012-03-13 17:33:00 来源:本站整理
利用Visual C++调试器调试[VC/C++编程]
本文“利用Visual C++调试器调试[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
有时程序能在调试版本运行但不能运行于公布版本,反之也有大概.普通说来,一个公布版本意味着某些范例的优化,而一个调试版本则没有优化.下面我们来看看它们的辨别:
步骤/办法
分外针对换试版本的编译选项
/MDd,/MLd大概/MTd
调试版本的运行时刻库有调试标记,利用了调试堆,调试堆的目的是发现内存破坏和内存泄露,并且向用户报告源代码的哪个地方出了问题.特点:
.调试版本的运行时刻库对内存的分配作了跟踪,答应用户查抄内存泄露.
.在刚分配的内存里写上0xCD的字节情势,用0xCD来填充刚分配的内存,有助于发现数据未被初始化的错误.
.在被释放的内存写上0xDD的字节情势,有助于发现已被释放的内存.
.在缓冲区的两边分配了四字节的保护数据,并用0xFD的字节情势作初始化,来查抄写内存的上溢出和下溢出.
.在每个内存分配的地方对源代码文件名和行号作了记录,有助于用户在源代码中对内存分配举行定位./Od
这个选项用来关闭优化开关.因为未被优化的代码直接对应于源代码,所以比优化后的代码更简单读懂.未被优化的代码编译和链接会更快,会有更短的调试周期.而由于优化,公布版本不见得会比调试版本运行得好,优化代码要求编译器做一些假定,去除冗余,但有时这个假定是错误的,并且去掉的冗余也有大概躲藏错误.如公布版本的帧指针(EBP存放器)省略(FPO)躲藏了函数原型不匹配的错误;在同步非常情势(只能由throw语句抛出,编译器默许,由/GX编译选项设置)下,非常处理程序大概被优化掉,会禁止程序中的C++非常处理代码安全地捕捉构造非常,在这种情形下,你必须利用异步非常情势(采纳任何指令城市产生非常的机制,由/Eha编译选项设置)./D “_DEBUG”
翻开条件编译调试代码开关.只有这个标记被定义,调试代码才会被编译,MFC利用_DEBUG标记来肯定到底链接的是哪个版本的MFC类库.在调试版本中,内联默许情形下是被关闭的./ZI
成立编辑持续(Edit and Continue)的程序数据库.这个选项会翻开/GF编译选项,/GF编译选项会消除反复字符串,并将字符串放到只读内存.编辑持续功效需求获得存储在 PDB文件里的特别信息来使得代码的改正对换试器有效.假如被改正文件对应的信息不在PDB文件里,编辑持续功效就不能举行,并且在调试历程中对代码的任何改正城市呈现下面的提醒信息“One or more files are out of date or do not exist.”./GZ
在调试版本顶用来发现那些在公布版本里才发现的错误.其作用以下:
.用0xCC情势初始化自动(本地)变量.
.在通过函数指针调用函数时,查抄栈指针,确认能否有调用法则不匹配.
.在函数最后查抄栈指针能否被改变./Gm
翻开最小化重新链接开关,削减链接时间.
以上是“利用Visual C++调试器调试[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论