VC6.0程序的另一种调试方案(release 调试)

来源:互联网 发布:java编译命令是什么 编辑:程序博客网 时间:2024/05/16 23:41

 

VC6.0是一款经典的程序开发集成环境,它造就了大批优秀的程序和程序员,直到现在还在项目中使用。

而调试在程序编写的过程中是非常非常重要的,我有点不愿做单元测试,而相信调试,一个功能完成之后就逐步跟踪程序的执行逻辑,直至符合自己的要求。众所周知,VC6.0有两种模式,一种为Debug,一种为Release,其不同就是Debug版加入了调试信息,未定义的变量赋予了初值,而Release版就是最终的发行版,程序进行了优化处理,代码小而快,但大家经常碰到的一件比较奇怪的事就是Debug版的程序执行正常,而到Release版后就会发生莫名其妙的事情,异常、程序逻辑错误等等,这是什么原因造成的呢,我得出的结论就是release版的一些变量未被正确初始化而引起的,所以现在就引起了另一种调试发行方法。

什么方法?就是在Release版里加入调试信息,一开始我们就在Release版里进行编程和调试。本来对于VC来说没有什么Debug和Release之分,无外乎就是一些配置的不同,所以实现Release的debug功能一点问题没有,鱼肉熊掌可以兼得了。下面就介绍相关设置

1. 创建项目,删除Debug配置

这是前提,因为我们只用Release版,所以就删掉Debug的配置,放着碍事。“Build–>Configurations”,选中Debug然后删除

debug1

2. 让Release带有Debug信息

方法很简单,下面几步照着做就可以了

到Project–>Project Settings–>C/C++标签,设置Category为General,设置Optimizations为Disable(Debug),设置Debug Info为Program Database。

debug2

到Project–>Project Settings–>Link里设置Category为General,选中Generate debug info

debug3

至此,Release版带有Debug信息的开发环境就完成了,除了没有优化外其他的和Release一样,大可放心用其开发,如果要是你的工程对VC依赖更少,可以取消预编译头,也就是StdAfx.h和StdAfx.c所起的作用。到C/C++标签里使Category为Precompiled Headers,选中Not using precompiled headers即可,一般高手都不用此项,呵呵,之后删除StdAfx.h和StdAfx.c这两个文件。

这种环境下,你的工程的汇编代码非常干净,回复了程序的原来面貌

debug4

上图可以看到,变量sum没有初始化就被使用,此时值为4891784,无用!

当开发完成后再把设置的那几项:Optimizations、Debug info、Generate debug info改回原样即可。