Posted on 2006-06-26 22:52
mahudu@cppblog 閱讀(201)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Programming
???
+++++++++++++++++
第十章:?代碼閱讀工具
+++++++++++++++++
223.詞匯工具可以高效地在一個(gè)大代碼文件中或者跨多個(gè)文件查找某種模式.
224.使用程序編輯器和正則表達(dá)式查找命令,?瀏覽龐大的源代碼文件.
225.以只讀方式瀏覽源代碼文件.
226.使用正則表達(dá)式?^function?name?可以找出函數(shù)的定義.
227.使用正則表達(dá)式的字符類,?可以查找名稱遵循特定模式的變量.
228.使用正則表達(dá)式的否定字符類,?可以避免非積極匹配.
229.使用正則表達(dá)式?symbol-1.?*symbol-2,?可以查找出現(xiàn)在同一行的符號(hào).
230.使用編輯器的?tags?功能,?可以快速地找出實(shí)體的定義.
231.可以用特定的?tag?創(chuàng)建工具,?增加編輯器的瀏覽功能.
232.使用編輯器的大綱視圖,?可以獲得源代碼結(jié)構(gòu)的鳥瞰圖.
233.使用您的編輯器來檢測(cè)源代碼中圓括號(hào)|方括號(hào)和花括號(hào)的匹配.
234.使用?grep?跨多個(gè)文件查找代碼模式.
235.使用?grep?定位符號(hào)的聲明|定義和應(yīng)用.
236.當(dāng)您不能精確地表述要查找的內(nèi)容時(shí),?請(qǐng)使用關(guān)鍵單詞的詞干對(duì)程序的源代碼進(jìn)行
查找.
237.用?grep?過濾其他工具生成的輸出,?分離出您要查找的項(xiàng).
238.將?grep?的輸出輸送到其他工具,?使復(fù)雜處理任務(wù)自動(dòng)化.
239.通過對(duì)?grep?的輸出進(jìn)行流編輯,?重用代碼查找的結(jié)果.
240.通過選取與噪音模式不匹配的輸出行(grep-v),?過濾虛假的?grep?輸出.
241.使用?fgrep?在源代碼中查找字符串列表.
242.查找注釋,?或標(biāo)識(shí)符大小寫不敏感的語言編寫的代碼時(shí),?要使用大小寫不敏感的模
式匹配(grep?-i).
243.使用?grep?–n?命令行開關(guān),?可以創(chuàng)建與給定正則表達(dá)式匹配的文件和行號(hào)的檢查
表.
244.可以使用?diff?比較文件或程序不同版本之間的差別.
245.在運(yùn)行?diff?命令時(shí),?可以使用?diff?–b,?使文件比較算法忽略結(jié)尾的空格,?用?
–w?忽略所有空白區(qū)域的差異,?用?–i?使文件比較對(duì)大
小寫不敏感.
246.不要對(duì)創(chuàng)建自己的代碼閱讀工具心存畏懼.
247.在構(gòu)建自己的代碼閱讀工具時(shí):?要充分利用現(xiàn)代快速原型語言所提供的能力;?從簡
單開始,?根據(jù)需要逐漸改進(jìn);?使用利用代碼詞匯結(jié)構(gòu)的
各種試探法;?要允許一些輸出噪音或寂靜(無關(guān)輸出或缺失輸出);?使用其他工具對(duì)輸入
進(jìn)行預(yù)處理,?或者對(duì)輸出進(jìn)行后期處理.
248.要使編譯器成為您的:?指定恰當(dāng)級(jí)別的編譯器警告,?并小心地評(píng)估生成的結(jié)果.
249.使用C預(yù)處理器理清那些濫用預(yù)處理器特性的程序.
250.要徹底地了解編譯器如何處理特定的代碼塊,?需要查看生成的符號(hào)(匯編)代碼.
251.通過分析相應(yīng)目標(biāo)文件中的符號(hào),?可以清晰地了解源文件的輸入和輸出.
252.使用源代碼瀏覽器瀏覽大型的代碼集合以及對(duì)象類型.
253.要抵制住按照您的編碼規(guī)范對(duì)外部代碼進(jìn)行美化的誘惑;?不必要的編排更改會(huì)創(chuàng)建
不同的代碼,?并妨礙工作的組織.
254.優(yōu)美打印程序和編輯器語法著色可以使得程序的源代碼為易讀.
255.cdecl?程序可以將難以理解的C和C++類型聲明轉(zhuǎn)換成純英語(反之亦然).
256.實(shí)際運(yùn)行程序,?往往可以更深刻地理解程序的動(dòng)作.
257.系統(tǒng)調(diào)用|事件和數(shù)據(jù)包跟蹤程序可以增進(jìn)對(duì)程序動(dòng)作的理解.
258.執(zhí)行剖析器可以找出需要著重優(yōu)化的代碼,?驗(yàn)證輸入數(shù)據(jù)的覆蓋性,?以及分析算法
的動(dòng)作.
259.通過檢查從未執(zhí)行的代碼行,?可以找出測(cè)試覆蓋的弱點(diǎn),?并據(jù)此修正測(cè)試數(shù)據(jù).
260.要探究程序動(dòng)態(tài)動(dòng)作時(shí)的每個(gè)細(xì)節(jié),?需要在調(diào)試器中運(yùn)作它.
261.將您覺得難以理解的代碼打印到紙上.
262.可以繪制圖示來描繪代碼的動(dòng)作.
263.可以試著向別人介紹您在閱讀的代碼,?這樣做一般會(huì)增進(jìn)您對(duì)代碼的理解.
264.理解復(fù)雜的算法或巧妙的數(shù)據(jù)結(jié)構(gòu),?要選擇一個(gè)安靜的環(huán)境,?然后聚精會(huì)神地考慮
,?不要借助于任何計(jì)算機(jī)化或自動(dòng)化的幫助.