多年来我养成一个习惯,每开发一个新功能之前,都尽可能先了解业界是否有人做过类似的工作,如果已经有软件能提供类似功能,我会尝试查阅它的用户手册,看别人是怎么做的。如果遇到某项较通用的功能,会先找几个源码搜索网站,用几个典型的关键词,比如API函数名,或者为实现某功能最有可能的函数命名,先海搜一通。如果你要开发的东西恰巧有人做过了,而且源代码都是现成的,当然会狂喜一番,因为无论是借鉴,移植,还原样照搬,都让你大幅度节约开发时间。
本文先介绍几个知名源码搜索网站,然后介绍如何将代码搜索功能集成到免费C/C++集成开发环境VcSmith或专业白盒测试工具VcTester中,让日常调测更加方便。
常用的源码搜索网站有:
1. Koders,http://www.koders.com/
使用起来比较方便,源代码库也较丰富,支持源代码的语言比较多,而且支持项目和授权协议搜索和过滤。
2. Google Codes,http://www.google.com/codesearch
搜索大佬搞的东西,不服不行,秉承Google一向简洁实用的风格。搜索能力很强,支持用正则表达式,支持在某语言、某文件、某包中搜索,也支持按许可协议搜索。
3. Krugle,http://www.krugle.com/
支持源码语言比较全面,可指定搜索范围,如注释、文档、函数定义、类定义等,还可搜索技术文档、开源项目。
4. Oreilly Code,http://labs.oreilly.com/code/
如果经常看Oreilly的图书,那么这个搜索对你会非常有用,可以在将近700本Oreilly出版的图书中搜索123,000多个示例代码,往往书籍中的示例代码其实都比较规范和高效,是学习编程的好途径之一。
5. gotAPI,http://start.gotapi.com/
侧重于Internet编程方面的源码搜索,支持包括HTML, CSS, CSS2, Javascript, ActionScript,Google code, XML, XSL, XPath, XSD, PHP, Ruby, Python,Perl, AS, ColdFusion, C, C++, MySQL, PostgreSQL, oracle, Java等在内的众多编程语言。
6. Codase,http://www.codase.com/
适合搜索C/C++的开源代码,可以通过函数名、类名等搜索。
VcSmith与VcTester都使用CseWin.exe作为它们的用户界面,将代码搜索功能集成到VcSmith的方法与集成到VcTester完全相同,集成代码搜索后可方便用户随时查阅。比如在Koders网站以"XmlEncode"为关键词进行搜索,显示页面如下:
我们希望在VcSmith的集成界面,选中一段代码,然后按一个快捷键(比如Shift+F3),立即弹出上述窗口。待集成的操作命令如下:
%IeAppFile% http://www.koders.com/default.aspx?s="%CseCurrText%"
其中“%IeAppFile%”是CSE的系统变量,指示IE浏览器的应用程序,“%CseCurrText%”是当前编辑区当前选中的文本。在Option对话框的UserTool页添加如下图扩展命令:
用户也可以添加如下命令使每次搜索都先弹出对话框,允许用户手工调整搜索单词,运行命令如下:
%IeAppFile% http://www.koders.com/default.aspx?s="%?+CseCurrText%"
其中“%?+CseCurrText”用来指示每次命令执行前,弹出对话框让用户修改“%CseCurrText%”的取值。
在VcSmith V3.1.3以后以版本,用户从PDB导入工程配置时,上述两种Koders代码搜索命令已自动集成进来,缺省指定的快捷键分别为“Shift+F3”与“Shift+F4”。
类似的,可以用如下两个命令集成Google代码搜索:
%IeAppFile% http://www.google.com/codesearch?q="%CseCurrText%"
%IeAppFile% http://www.google.com/codesearch?q="%?+CseCurrText%"
如下命令集成krugle代码搜索:
%IeAppFile% http://www.krugle.org/kse/files?query="%CseCurrText%"
%IeAppFile% http://www.krugle.org/kse/files?query="%?+CseCurrText%"
在VcSmith集成其它源码搜索可以类推,本文不赘述。