Visual C++中很實用但是大家很少用的一些功能

本文轉貼於:http://topic.csdn.net/u/20091015/01/b68517c2-5b02-414f-ba12-bf221ad8e518.html

作者:jackyjkchen

 

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、VS2003(全部版本)、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:/b/b/a.cpp(8) : warning C6202: “s”在對“strcpy”的調用中緩衝區溢出,該緩衝區可能是在堆棧中分配的: 長度“13”超過了緩衝區的大小“10”
1>a:/b/b/a.cpp(10) : warning C6203: 非堆棧緩衝區“p”在對“strcpy”的調用中溢出: 長度“13”超過了緩衝區的大小“10”
1>a:/b/b/a.cpp(8) : warning C6386: 緩衝區溢出: 訪問“參數 1”時,“10”個字節可寫,但可能寫入了“13”個字節: Lines: 7, 8
1>a:/b/b/a.cpp(10) : warning C6386: 緩衝區溢出: 訪問“參數 1”時,“10”個字節可寫,但可能寫入了“13”個字節: Lines: 7, 8, 9, 10
1>a:/b/b/a.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)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章