多年來我養成一個習慣,每開發一個新功能之前,都儘可能先瞭解業界是否有人做過類似的工作,如果已經有軟體能提供類似功能,我會嘗試查閱它的使用者手冊,看別人是怎麼做的。如果遇到某項較通用的功能,會先找幾個源碼搜尋網站,用幾個典型的關鍵詞,比如API函數名,或者為實現某功能最有可能的函數命名,先海搜一通。如果你要開發的東西恰巧有人做過了,而且原始碼都是現成的,當然會狂喜一番,因為無論是借鑒,移植,還原樣照搬,都讓你大幅度節約開發時間。
本文先介紹幾個知名源碼搜尋網站,然後介紹如何將程式碼搜尋功能整合到免費C/C++整合式開發環境VcSmith或專業白盒測試載入器VcTester中,讓日常調測更加方便。
常用的源碼搜尋網站有:
1. Koders,http://www.koders.com/
使用起來比較方便,原始碼庫也較豐富,支援原始碼的語言比較多,而且支援項目和授權協議搜尋和過濾。
2. Google Codes,http://www.google.com/codesearch
搜尋大佬搞的東西,不服不行,秉承Google一向簡潔實用的風格。搜尋能力很強,支援用Regex,支援在某語言、某檔案、某包中搜尋,也支援按許可協議搜尋。
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整合其它源碼搜尋可以類推,本文不贅述。