Monthly Archives: 2009年十一月

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

2009.11.5 , 分享心得 , No Comments , 256 views

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)。

又要给IT协会的孩子们上课了.这回 虚拟化技术。

2009.11.2 , 技术宅男 , No Comments , 139 views

      好久都没有给IT协会的小孩们上课了。大家都提不起兴趣,弄得我自己也没什么动力。呵呵。不过新一届会员来了,总得讲点什么哇。打算给他们讲讲当前的虚拟化技术。吼吼,当前的热门技术之一呢。自己掌握的也不算太深,就拿简单易用的Vmware做例子好了嗯。
     首先呢,我想用一款摄像头游戏作为我整个课程的引入,这个游戏叫Camgoo,是可以用你的肢体动作与电脑进行交互的一款游戏。这样把大家引入到虚拟世界中来。然后,我打算演示我电脑上安装的几个虚拟机,并简单的说明下虚拟机存在的意义。然后在这里引出虚拟机网络连接的几种模式,桥接,NAT,本地各有什么样的区别。估计这样可能会引起一些小孩对网络方面的好奇心。之后引入产品Vmware Server以及ESX还有GSX.只做简单讲解,面得有些概念容易混淆大众。重点讲解Vmware Server.毕竟免费了。而且C412机房的服务器上也部署了这款虚拟机。之后,比较Workstation跟Server版的区别,从而让大家明白真正的虚拟化在企业中是怎么运作的。让大家了解自己手中的虚拟机不单单是用来做实验的玩具。此外,我还想再次强调虚拟机的“快照”功能,应用实例说明迅速的故障恢复对企业来说是多么的重要。可是让他们随意的修改虚拟出来的操作系统,然后应用快照给予恢复。将理论上升到实践的层面。如果还有时间,可以再阐明一下ACE的概念,让孩子们明白虚拟机部署不单单是复制粘贴这么简单。让大家了解到不同平台(Windows,Linux)对于虚拟化的部署是不相同的。虽然可以跨平台,但不是那么简单容易。最后,留出答疑时间,让大家把自己的疑问说出来。

snap035

使用Vmware 6.5 虚拟Win7

PS:今天在Win7下部署虚拟机出现了一个错误:提示一个服务没有运行,检查服务,并没有发现该服务,后来以管理员身份运行Vmware,故障解决。

有了CMNET的套餐 可以用手机收发邮件了咯

2009.11.1 , 技术宅男 , 1 Comment , 159 views

      最近中国移动开通了山东地区5元包30M不限APN的业务包,终于可以尽情的享用一些必须使用CMNET接入点的应用了。比如,用手机内置的邮箱功能来收发邮件。我使用的是手机是Nokia的E50,之前的时候也试过各种各样的邮件客户端,但都有着各种各样的问题,比如消耗内存,浪费流量,甚至还造成了我的小E时不时的死机。而且其他第三方软件跟系统的整合性也欠佳。而现在,有了CMNET我终于可以把手机的邮件功能利用起来了。

AFImg-1

AFImg-4

如图,是不是很方便?而这么方便的功能,设置起来也很简单,以Gmail邮箱为例(Gmail支持IMAP这东西比较好用 嘿嘿)~首先你需要到Gmail里打开邮箱的IMAP功能(话说QQmail也支持这个了哈。。)再次按照下面给出的参数来配置你的手机:

接收电子邮件

用户名:Gmail用户名,不包括”@gmail.com”
密码:Gmail密码
邮件接收服务器:imap.gmail.com
使用接入点:CMNET
信箱名称:Gmail(任何你喜欢的名字)
信箱类型:IMAP4,如果你的手机不支持IMAP4,也可以选择POP3,POP3不支持同步
安全(端口):SSL/TLS
端口:默认

发送电子邮件

我的电子邮件地址:你的邮箱地址,必须写全!
用户名:Gmail用户名,不包括”@gmail.com
密码:Gmail密码
邮件发送服务器:smtp.gmail.com
使用的接入点:总是询问
安全(端口):StartTLS
端口:默认

按照这样设置 你就可以在手机上方便的收发邮件了咯~当然 如果你设置了定时收取邮件,那么几乎可以跟PushMail一样哈~~

AFImg-6

AFImg-9