Visual C++中很实用但是大家很少用的一些功能 [CSDN]

1.CRT中内存泄漏检测的宏
有几个初学者写有大量动态内存分配不泄露的?又有几个老鸟敢嚣张的自称写那种多次分配多个函数出口的程序从来都是一次就完美的?
头文件处包含

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif

主函数头部加上

#ifdef _DEBUG_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF| _CRTDBG_LEAK_CHECK_DF);
#endif

不论你从哪个出口退出的,只要该出口有内存泄漏,都会在ide中显示。
适应版本,VC6、VS2005(全部版本)、VS2008(全部版本)
2.静态代码分析
在VS2005、VS2008的项目属性里,倒数第二项,仅限于Team Suite版本。
给大家一段糟糕的代码,就用初学者容易理解的字符串溢出为例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[10] = {0};
strcpy(s,"111111111111");
char *p=(char*)malloc(10);
strcpy(p,"111111111111");
free(p);
system("pause");
return 0;
}

这是生成的警告,C6开头(普通警告C4开头),而且全中文,再菜都能看懂,遇到一些比较复杂的警告去看MSDN,同样全中文,每个警告的原因和解决办法、示例代码都非常的全面清晰!以后静态代码分析开着,这种白痴问题不要问了……VC的静态代码分析并不十分严格(相对于Intel C++,以及一些独立的代码分析工具),但可以解决80%以上的代码安全漏洞,另外W4警告最好也打开。
1>a:bba.cpp(8) : warning C6202: “s”在对“strcpy”的调用中缓冲区溢出,该缓冲区可能是在堆栈中分配的: 长度“13”超过了缓冲区的大小“10”
1>a:bba.cpp(10) : warning C6203: 非堆栈缓冲区“p”在对“strcpy”的调用中溢出: 长度“13”超过了缓冲区的大小“10”
1>a:bba.cpp(8) : warning C6386: 缓冲区溢出: 访问“参数 1”时,“10”个字节可写,但可能写入了“13”个字节: Lines: 7, 8
1>a:bba.cpp(10) : warning C6386: 缓冲区溢出: 访问“参数 1”时,“10”个字节可写,但可能写入了“13”个字节: Lines: 7, 8, 9, 10
1>a:bba.cpp(10) : warning C6387: “参数 1”可能是“0”: 这不符合函数“strcpy”的规范: Lines: 7, 8, 9, 10
适应版本:VS2005(Team Suite),VS2008(Team Suite)
3.性能分析
菜单栏的“分析”菜单,“启动性能向导”,仅限于Team Suite版本。相当专业化的软件工程工具,但秉承了微软一贯的易用风格和完整的中文化,图表形式的结果。我希望学习数据结构、研究算法性能、优化程序效率的同志好好用下,可以分析出程序调用的各个文件、模块、函数的时间比例,最快的找出性能瓶颈,非常容易使用。举个例子,如果你写一个加密算法,分析之后发现加密函数的时间比例仅占20%,那你就别慌去优化算法,绝对是你调用的逻辑有问题,这个影响很多时候比算法还大!当算法比例占到90%以上时,再去一个一个模块的分析算法。想当初我就是用这个工具成功优化出了密钥生成时间平均0.2s的RSA1024(tomcrypt 0.1s,大牛的东西没法比……)。
适应版本:VS2005(Team Suite),VS2008(Team Suite)。