工具演練(學員版)_第1頁
工具演練(學員版)_第2頁
工具演練(學員版)_第3頁
工具演練(學員版)_第4頁
工具演練(學員版)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

工具演練Jun2008InternalPage2課程大綱第一部分:SourceInsight使用第二部分:PC-LINT使用第三部分:CCChecker/Quicker/CodeReview使用第四部分:VC的調(diào)試方法第五部分:綜合實戰(zhàn)CCCheckerPage3課程大綱SourceInsightPC-LINTVC調(diào)試方法CodeReviewQuickerPage4第一部分:SourceInsight使用Page5SourceInsight工具安裝文件路徑:\\szxfs08-pub\RND_SOFT_F\Software\1.FreetoInstall\Standard\SourceInsight\V3.5安裝文件:本課程作為附件已附帶SourceInsight安裝Page6SourceInsight介紹SourceInsight是一個支持多種開發(fā)語言(Java、C/C++/C#等等)的編輯器和瀏覽器,由于其查找、定位、彩色顯示等功能的強大,在我們的實際工作中得到廣泛的應(yīng)用。Page7SourceInsight工具使用(一):創(chuàng)建工程首先選擇主菜單中的“Project”選項的子菜單“NewProject”新建一個項目,此時會彈出一個對話框要求你選擇項目組文件存放的路徑以及項目文件名(用此testproject文件夾下文件建立工程)。Page8SourceInsight工具使用(一):創(chuàng)建工程選擇確認后,將會彈出一個對話框,接受默認選擇。如果硬盤空間足夠的話,可以將Configuration的第一個復(fù)選框選上,該選項將會占用與源代碼大致同等的空間來建立一個本地數(shù)據(jù)庫以加快查找的速度。Page9SourceInsight工具使用(一):創(chuàng)建工程選擇“OK”按鈕,將會有另一個新的對話框彈出,在這個對話框里,可以選擇將要編輯、瀏覽的文件加入工程。一種方式是通過在FileName中輸入要閱讀源代碼文件的名稱,點擊“Add”按鈕將其加入,也可以通過其中“AddAll”和“AddTree”兩個按鈕可以將選中目錄的所有文件加入到工程中,其中“AddAll”選項會提示加入頂層文件和遞歸加入所有文件兩種方式,而“AddTree”相當于“AddAll”選項的遞歸加入所有文件,可以根據(jù)需要使用。推薦使用“AddTree”方式。后續(xù)可以通過Project->AddandRemoveProjectFiles增加或者刪除工程中的文件。Page10SourceInsight工具使用(一):創(chuàng)建工程正確加入文件以后,Project基本上就建立完成了,此時建議執(zhí)行SynchronizeFile命令,同時選上“Forceallfilestobere-parsed”復(fù)選框,SourceInsight將會為項目中所有文件更新符號信息庫。Page11SourceInsight工具使用(二):

LookupReferencesLookupReferences可以說是SourceInsight實際使用中最常用的操作,它廣泛地應(yīng)用在各類查詢中。選中某個變量、函數(shù)后選擇菜單Search>LookupReferences或者使用快捷方式(CTRL+/)或者點擊工具欄上的就可以使用這項功能,它可以查詢項目中所有源文件,包括注釋、采用#ifdef定義的非激活代碼。

Options是搜索的選項,包括是否區(qū)分大小寫,全字匹配,跳過非激活代碼,僅僅搜索注釋,啟動優(yōu)化匹配,修改匹配文件的修改時間。

SearchMethod包含四種方式:SimpleString(簡單字符串),RegularExpression(按照正則表達式的方式查詢),KeywordExpression(關(guān)鍵字查詢)LookupReference(按照引用關(guān)系進行查詢,缺省查詢方式).Page12SourceInsight工具使用(二):

LookupReferences請在工程中利用SimpleString(簡單字符串),RegularExpression(按照正則表達式的方式查詢),KeywordExpression(關(guān)鍵字查詢)LookupReference(按照引用關(guān)系進行查詢,缺省查詢方式)幾種方式查找全部變量MapULFlowCtrl,請注意觀察幾種查找方式的區(qū)別Page13SourceInsight工具使用(三):DocumentOptionsDocumentOptions允許你根據(jù)文件擴展名定義它的編輯、顯示格式。執(zhí)行菜單Options>DocumentOption或者在打開的文件中點擊右鍵選擇DocumentOptions后,你將看到下圖的對話框,你可以通過對話框的AddType,RemoveType新增和刪除某類文件格式。因公司編程規(guī)范中明確要求不能使用TAB鍵,通過點中對話框中的Expandtabs自動進行Tab鍵擴展。(默認使用4空格替換Tab鍵,只能替換新增的代碼,舊代碼中可以通過宏替換,后續(xù)章節(jié)有相關(guān)講解)選中Showrightmargin設(shè)置頁面寬度標記來查看代碼行是否超長。(一般設(shè)置未80字符)選中Showlinenumber來在文件中顯示文件行號選中Visibletabs來查看代碼中是否還存在Tab鍵Page14SourceInsight工具使用(三):DocumentOptions實際操作:請利用DocumentOption幾個選項觀察函數(shù)correctness1)注意觀察文件中是否有Tab鍵2)空格是如何顯示3)選擇“ExtandTab”,按下Tab鍵,在代碼中出現(xiàn)的是什么字符4)選擇“Showrigthmargn”觀察右側(cè)出現(xiàn)什么分隔符Page15SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系在實際應(yīng)用中,你可以靈活地應(yīng)用RelationWindow查詢函數(shù)(包括全局變量,宏定義、結(jié)構(gòu)體等標識符)的調(diào)用關(guān)系和引用關(guān)系,它能幫助你快速地了解整個項目工程的程序結(jié)構(gòu)。Relationwindow可以通過菜單View->RelationWindow或者快捷工具欄中的RelationWindow按鈕進行打開/關(guān)閉操作。RelationWindow有多種視圖方式,可以通過窗口下方的按鈕選擇。Page16SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系RelationWindow主要包括3種關(guān)聯(lián)類型:Contains:顯示出當前標識符的內(nèi)容,例如結(jié)構(gòu)體變量會顯示出它的成員變量.Calls:顯示調(diào)用關(guān)系,常用于參看函數(shù)的調(diào)用關(guān)系,當選中一個函數(shù)后,會顯示出該函數(shù)調(diào)用了哪些函數(shù)。References:顯示引用關(guān)系,常用于參看函數(shù)的引用關(guān)系,當選中一個函數(shù)后,會顯示出該函數(shù)被哪些函數(shù)所引用。RelationWindow下面一些常用的工具按鈕,這些按鈕在實際使用過程中是十分有用的。Page17SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系實際操作:1)請查看函數(shù)collect_unmarked都是被哪些函數(shù)調(diào)用2)請查看函數(shù)collect_unmarked都是調(diào)用了哪些函數(shù)Page18SourceInsight工具使用(四):常用快捷鍵Shift+F8:高亮顯示某一函數(shù)或變量F7:在整個工程中匹配關(guān)鍵字F8:在當前文件中匹配關(guān)鍵字CTRL+/:LookupReferencesShift+F9:下一個link標簽Alt+,:后退進光標位置Alt+.:前進光標位置F9/F10:整行左/右縮進一個TAB鍵雙擊{/}:選中和雙擊的括號匹配的括號之間的內(nèi)容Alt+{/}:到達成對的}/{位置Tab:增加4個空格對齊(可選中一段代碼Tab對齊)Shift+Tab:減除4個空格對齊,與Tab鍵相反Alt+Shift+S:同步工程文件Ctrl+F10:最大化/恢復(fù)當前窗口Ctrl+O:打開工程文件列表(按ESC則關(guān)閉)Page19SourceInsight工具使用小結(jié)SourceInsight是一種基于項目工程的應(yīng)用程序,它將對項目工程中的文件進行分析以后創(chuàng)建一個自身的數(shù)據(jù)庫用于記錄項目文件之間的聯(lián)系,并且能夠進行動態(tài)的更新。它能顯示語法符號(變量、函數(shù)、類等等)之間的引用樹,類的繼承流圖,以及調(diào)用樹,極大地提高了代碼的瀏覽速度;在進行代碼的編輯,它會自動地給出非常有用的相關(guān)信息。SourceInsight的功能非常豐富,上述提到的僅僅是我們比較常用功能中的一部分,詳細的功能使用可以參見《SourceInsight的使用指南.doc》。安裝完SI助手之后通過程序->SI助手可以找到該指南。Page20實際操作演練請獨立完成下面的操作:1)創(chuàng)建test1工程,加入代碼并且同步(testproject前面已經(jīng)創(chuàng)建)2)請打開工程窗口,查看該工程的所有文件3)請打開文件Driver.c文件3)請快速的打開函數(shù)verify_complete4)有個函數(shù)名稱現(xiàn)在僅記得其中包括XXXmyXXXXgetXXX,請快速找到該函數(shù)5)在函數(shù)mysound4中,請找到變量soundpd1的定義,看完定義后,還回到原來的函數(shù)。大家演練,演練后請一位同學上講臺演示操作Page21第二部分:PC-LINT使用Page22課程目標了解PC-LINT工具的基本概念掌握PC-LINT在SourceInsight中使用方法熟練使用PC-LINT進行檢查。Page23PC-LINT是什么?能干什么?(一)(1)PC-Lint是一種靜態(tài)代碼檢測工具,可以說,PC-LINT是一種更加嚴格的編譯器,不僅可以象普通編譯器那樣檢查出一般的語法錯誤,還可以檢查出那些雖然完全合乎語法要求,但很可能是潛在的、不易發(fā)現(xiàn)的錯誤,例如:數(shù)組下標非法,變量未被初始化,使用空指針,冗余的代碼等等,幫助您在動態(tài)測試之前發(fā)現(xiàn)編碼錯誤,降低消除錯誤的成本。例如: test.h

#defineSQUARE(a)a*a test.c intx=100; x=SQUARE(x+x);\test.c1Info773:Expression-likemacro'SQUARE'notparenthesized\test.c8Warning665:Unparenthesizedparameter1inmacro'SQUARE'ispassedanexpression\test.c8Warning665:Unparenthesizedparameter1inmacro'SQUARE'ispassedanexpression應(yīng)該為:#defineSQUARE(a)((a)*(a))Page24PC-LINT是什么?能干什么?(二)(2)PC-lint不但可以檢測單個文件,也可以從整個項目的角度來檢測問題,因為C語言編譯器固有的單個編譯,這些問題在編譯器環(huán)境下很難被檢測,而PC-Lint在檢查當前文件的同時還會檢查所有與之相關(guān)的文件,可想而知,它會對我們有很大的幫助(3)PC-lint支持幾乎所有流行的編輯環(huán)境和編譯器,比如BorlandC++從1.x到5.x各個版本、BorlandC++、GCC、VC,VC.net、Sourceinsight、intelC/C++等等,也支持16/32/64的平臺環(huán)境(4)支持ScottMeyes的名著(EffectiveC++/MoreEffectiveC++)中說描述的各種提高效率和防止錯誤的方法Page25PC-LINT是什么?能干什么?(三)案例分享:看一個真實的慘痛案例!將案例簡單模擬如下:structperson{ char*name; char*address;};voidfunc1(){ structpersonstBob; // free(stB);//由于stBob沒有初始化所以stB指向的可能是一個野指針,//釋放可能出現(xiàn)各種異常(包括死機等)

//}對于變量沒有初始化的情況,PC-LINT工具能檢查出來的。公司對PC-LINT明確要求:告警為零Page26PC-LINT的安裝安裝路徑:

\\szxfs08-pub\RND_SOFT_F\Software\1.FreetoInstall\Standard\PC-lintV80安裝步驟:與普通應(yīng)用軟件的向?qū)е敢惭b一樣,簡單描述一下:(1)給出PC-Lint的安裝路徑和選擇設(shè)置的保存文件。(2)選擇你所使用的C/C++編譯器:比如VisualC++6.x/UnixC/C++等。(3)選擇內(nèi)存模式:比如32bitFlatModel。(4)選擇所使用的庫:比如MFC,OWL,等,可多選,在windows下開發(fā)的一般要選中windows32bit。(5)C++編程提出過重要建議的作者,選擇某作者后,他提出的編程建議方面的選項將被打開:比如ScottMeyers,可不選。(6)頭文件的設(shè)置:可在后面步驟中手工添加。(7)詳細的PCLINT參考手冊在安裝目錄下:C:\lint\pc-lint.pdf。上述安裝配置可以不用關(guān)心,各產(chǎn)品都會根據(jù)自己的開發(fā)環(huán)境發(fā)布標準的配置??赡苓BPC-LINT都不用安裝,直接拷貝產(chǎn)品的標準Lint目錄就可以使用了!Page27PC-LINT整合到編輯環(huán)境中使用(一)以SourceInsight為例介紹整合過程1、請直接拷貝文件夾“免安裝版軟件”中的整個“Lint”文件夾到C盤根目錄2、在option.lnt文件中添加工程頭文件路徑,打開option.lnt有詳細的解釋3、打開sourceinsight->options->Custonmcommand,按照下面要求配置:Run:C:\LINT\LINT-NT.EXEoption.lnt%fDir:C:\LINTPattern:^\([a-zA-Z].*\)(\([0-9][0-9]*\)).*Page28PC-LINT整合到編輯環(huán)境中使用(二)4、打開Options->MenuAssignments,設(shè)置快捷鍵Page29課程大綱PC-LINT概述PC-LINT安裝和配置PC-LINT詳解PC-LINT小實踐小結(jié)Page30PC-LINT發(fā)現(xiàn)問題的機理(1)檢查源文件及其訪問的資源,對可能存在問題的代碼行顯示告警信息,由于錯誤會多種多樣,PC-LINT對告警進行了分類。(2)首先按照嚴重程度分為Error、Warning、Info等幾個級別。(3)然后在每一級又根據(jù)錯誤類型設(shè)置了很多告警編號。這些告警號的含義都可以在安裝目錄的msg.txt中找到。注意:雖然分級別,但是并不是所有info告警的嚴重程度就一定低于warning!Page31PC-LINT告警分類錯誤分類CC++SyntaxErrors1-1991001-1199InternalErrors200-299FatalErrors300-399Warnings400-6991400-1699Informational700-8991700-1899ElectiveNotes900-9991900-1999Page32PC-LINT告警詳解(一)第一類(錯誤及極可能導(dǎo)致出錯處)1、錯誤1-199

明令禁止的2、未初始化

530: 變量未初始化

644-645: 變量可能沒有初始化

727-729: 變量未明確初始化3、返回值

533: 函數(shù)需要(不需要)返回值4、比較:

568,775: 無符號數(shù)永遠不會小于0 650: 常量超過比較對象所能表示的范圍5、聲明

578: 局部變量和全局變量定義沖突Page33PC-LINT告警詳解(二)第二類(可能的錯誤,需判斷程序邏輯)1、布爾值

774: Booleanwithin‘String’alwaysevaluatesto[True/False]2、精度損失

569: 丟失信息,常量賦值

734: 丟失精度,變量之間傳遞值

732,570: 丟失符號

571: 可疑的強制類型轉(zhuǎn)換?

616: switch…case…語句缺少break3、返回值

534: 忽略返回值4、邊界值

661: 訪問邊界以外的指針,

662: 對指針進行操作時,使得指針的范圍超過有效范圍5、空指針

413: 對空指針進行操作,比如*,++,--操作

613: 與413類似

668: 將空指針傳遞給函數(shù)Page34PC-LINT告警詳解(三)6、switch語句

744: switch…case語句沒有default語句使用

787: switch…case語句中使用枚舉類型,但是有一個值沒有出現(xiàn)在case中7、未用的代碼和變量

527: 代碼不可達,也就是冗余代碼

528: 靜態(tài)變量或靜態(tài)函數(shù)只聲明但沒有定義

529: 變量進行了定義,但是后續(xù)沒有使用

715: 參數(shù)未被使用,函數(shù)定義了一個參數(shù),但是函數(shù)中沒有使用

550: 局部變量沒有被使用

551: 靜態(tài)變量沒有被使用

552: 外部變量沒有被使用8、賦值

522: 語句僅僅包含一個表達式,沒有產(chǎn)生任何的結(jié)果可能有遺漏

9、參數(shù)

515: 參數(shù)個數(shù)不匹配,函數(shù)定義的參數(shù)和調(diào)用時不符

516: 參數(shù)類型不匹配Page35課程大綱PC-LINT概述PC-LINT安裝和配置PC-LINT詳解PC-LINT小實踐小結(jié)Page36PC-LINT小實踐1、前置條件:已經(jīng)安裝和配置了PC-LINT,并將它整合到SourceInsight中,菜單中的PCLINT_Current功能項也已經(jīng)關(guān)聯(lián)了PC-LINT命令。2、待PC-LINT的文件:3、先使用PC-LINT工具檢查錯誤,再看看如何將這些錯誤消除。大家演練,演練后請一位同學上講臺演示操作Page37課程大綱PC-LINT概述PC-LINT安裝和配置PC-LINT詳解PC-LINT小實踐小結(jié)Page38課程小結(jié)小結(jié)1:PC-LINT工具可以在代碼編輯階段發(fā)現(xiàn)各種語法錯誤或者合乎語法的潛在錯誤,提高代碼的質(zhì)量,降低排查錯誤的成本。小結(jié)2:PC-LINT工具可以和各種編輯器整合使用,進行可視化的、批量的檢查。小結(jié)3:PC-LINT僅僅是檢查出可能存在的隱患,代碼是否有問題?如何處理問題?需要人工具體問題具體分析,不能盲目的追求零告警。Page39第三部分:CCChecker/Quicker/CodeReview使用Page40圈復(fù)雜度工具--CCChecker功能介紹CCChecker是圈復(fù)雜度度量工具,用以及時發(fā)現(xiàn)代碼中最復(fù)雜的地方。CCChecker極大的方便了開發(fā)人員在開發(fā)中隨時檢查代碼圈復(fù)雜度的情況。CCChecker工具包括了三個度量功能:版本圈復(fù)雜度比對功能;單個文件圈復(fù)雜度度量功能;單個函數(shù)圈復(fù)雜度度量功能。Page41圈復(fù)雜度工具—CCChecker的安裝1、安裝CCChecker.安裝:雙擊安裝包,采用默認安裝方式安裝。本課程附帶了安裝包,如果因C盤權(quán)限問題可直接拷貝本課程安裝后的文件:直接拷貝“免安裝版軟件”文件夾中的“CCChecker”文件夾到C盤根目錄2、配置在開始菜單中選擇Programe->CCChecker->Help->ConfigGuide,即可打開文檔,按照文檔說明進行CCChecker在sourceinsight中的集成。直接拷貝時請參見:圈復(fù)雜度工具手工配置方法Page42圈復(fù)雜度工具--CCChecker使用對單文件執(zhí)行檢查結(jié)果:對單函數(shù)執(zhí)行檢查結(jié)果:Page43附:圈復(fù)雜度工具手工配置方法定制CCChecker命令:Options->CustomCommands相關(guān)的參數(shù)輸入:Run:C:\CCChecker\CCMainCheck.exe%fDir:C:\CCCheckerPattern:^\([a-zA-Z].*\)(\([0-9][0-9]*\)).*Page44公司要求1、新增函數(shù)的圈復(fù)雜度最大不大于15,對于圈復(fù)雜度大于15的代碼,需經(jīng)過分析確認為良性設(shè)計。產(chǎn)品線軟件工程部可為分析提供仲裁或技術(shù)支持。2、對于老代碼的修改要求為:圈復(fù)雜度大于15的老代碼,修改后的圈復(fù)雜度不能大于修改以前的;圈復(fù)雜度不大于15的老代碼,修改后的圈復(fù)雜度也不大于15。3、版本轉(zhuǎn)測試時,由開發(fā)負責人提供新增函數(shù)的圈復(fù)雜度和版本平均圈復(fù)雜度的度量報告。Page45實際應(yīng)用演練主要演練以下內(nèi)容:使用CCChecker對前面已建立的工程演練用的代碼進行檢查。大家演練,演練后請一位同學上講臺演示操作Page46Quicker的基本功能介紹標準C語言擴展標準說明生成代碼修改注釋其它常用的宏P(guān)age47安裝SI助手直接安裝--SI助手1.4b.如果遇到C盤權(quán)限問題,則:直接拷貝“免安裝版軟件”文件夾中的“SI助手”文件夾到C盤根目錄。Page48Quicker工具集成到SouceInsight中1、把宏加入到BASE工程:選取“sourceinsight->

Project->OpenProject”,打開默認的Base工程,利用“sourceinsight->

Project->AddandRemoveProjectFiles”,把“C:\SI助手\backup”中的文件:quicker.em加入到工程,然后,

利用“Project->SynchronizeFiles”進行同步

。2、設(shè)置快捷鍵sourceinsight->

options->MenuAssignments…把宏“AutoExpand”加到菜單中并設(shè)置快捷鍵Page49Quicker的基本功能(一):標準C語言擴展./*

--自動生成/**/,如果出現(xiàn)換行,工具會自動對齊.{

--自動生成{}.while(wh)--自動生成While語句.if--自動生成if語句(ife,ifs生成對應(yīng)格式的if語句).for

--自動生成for語句.fo

--自動生成for語句,增加了自動定義循環(huán)變量功能.do

--自動生成dowhile語句.#ifd--自動生成#ifdef命令.#ifn--自動生成#ifndef命令.#if--自動生成#if命令.cpp

--自動生成適用于c++的c原型說明定義.switch(sw)

--自動生成switch語句,可以通過拷貝case值自動生成.case(ca)--自動生成case語句,用于增加switch中一個分支.struct(st)--自動生成結(jié)構(gòu)類型定義.enum(en)--自動生成枚舉類型Page50Quicker的基本功能(二):標準說明生成.config(co)--配置用戶名和標題的說明語種。用戶名就是前面自動生成的作者,修改者的名字,語種,就是前面提到的文件頭說明和函數(shù)頭說明所

采用的的語言有中文和英文兩種選擇

.file(fi)--生成標準的文件頭。它能自動取得文件名,作者名,時間

,以及函數(shù)列表,而且在生成的過程中會主動彈出功能描述能的內(nèi)容輸入

對話框(提示對話框只能輸入256個字符),輸入的內(nèi)容能夠自動換行對齊.func(fu)--生成標準的函數(shù)頭說明。該函數(shù)必須在該函數(shù)的前一行執(zhí)

行,它能自動取得函數(shù)名,能夠自動取得函數(shù)的輸入、輸出參數(shù),并且排

列好,同時生成日期和作者。能夠提示輸入功能描述,輸入的內(nèi)容能夠自

動換行對齊。.hi

--增加修改歷史列表。自動在該行增加修改歷史列表,用

于文件頭和函數(shù)頭說明中的歷史記錄更新。.hd--自動生成函數(shù)頭文件。該命令能夠自動生成但前C文件的

頭文件定義,包括常用的宏定義,還有全部的函數(shù)原型定義。.Hdn--生成新的有文件。該命令能夠自動生成指定的的頭文件定

義,包括常用的宏定義,提示輸入函數(shù)原型的類型。Page51Quicker的基本功能(三):代碼修改注釋.pn

--添加問題單號,工具會記下單號,后續(xù)需要的地方自動使用.a(chǎn)p--添加問題單修改說明。其中輸入的問題單號具有pn功能.a(chǎn)b

--添加問題修改(增加代碼)開始說明。問題單號使用之前pn或者ap設(shè)定的.a(chǎn)e

--添加問題修改(增加代碼)結(jié)束說明。和ab對應(yīng).a(chǎn)bg--添加問題修改(增加代碼)開始和結(jié)束說明。一次性完成ab和ae的功能.db--添加問題修改(刪除代碼)開始說明。問題單號使用之前pn或者ap設(shè)定的.de

--添加問題修改(刪除代碼)結(jié)束說明。和db對應(yīng).dbg

--添加問題修改(刪除代碼)開始和結(jié)束說明。一次性完成db和de的功能.mb--添加問題修改(修改代碼)開始說明。問題單號使用之前pn或者ap設(shè)定的.me

--添加問題修改(修改代碼)結(jié)束說明。和mb對應(yīng).mbg--添加問題修改(修改代碼)開始和結(jié)束說明。一次性完成mb和me的功能Page52Quicker的基本功能(四):其它常用的宏下面的宏需要通過設(shè)置快捷鍵或者菜單來完成的:.ComentCPPtoC

:將從C++的//注釋改為標準的C/**/注釋。

可以一次選中多行同時修改.ReplaceBufTab

:替換當前文件中的所有Tab鍵.ReplaceTabInProj

:替換所有工程文件中的Tab鍵.InsertFuncName

插入當前的函數(shù)名。會將函數(shù)名插入到光標處.InsertTraceInfo

在函數(shù)的出、入口首尾加入打印代碼.AutoInsertTraceInfoInBuf

:在當前文件的函數(shù)出入口加入打印信息.AutoInsertTraceInfoInPrj

:在當前工程的函數(shù)出入口加入打印信息.RemoveTraceInfo

:刪除InsertTraceInfo()添加的打印信息.RemoveCurBufTraceInfo

:刪除文件中InsertTraceInfo()添加的打印信息.RemovePrjTraceInfo

:刪除工程中InsertTraceInfo()添加的打印信息.FormatLine

:自動格式當前行。自動完成超長行的換行以及對齊.UpdateFunctionList

:能夠自動在光標所在行重新生成函數(shù)列表.Review_Add_Comment

:增加檢視記錄。這個有專門的CodeReview工具。.DelCompoundStatement

:復(fù)合語句刪除。其它還存在大量的宏:可以在SourceInsight中Options->KeyAssignments彈出的對話框Command項輸入Macro看下面列出的所有宏P(guān)age53學員新建一個.c,熟練執(zhí)行下面的功能:/*--自動生成/**/,如果出現(xiàn)換行,工具會自動對齊.{--自動生成{}.while(wh)--自動生成While語句.if--自動生成if語句。(ife,ifs生成對應(yīng)格式的if語句).for--自動生成for語句.switch(sw)--自動生成switch語句,可以通過拷貝case值自動生成.case(ca)--自動生成case語句,用于增加switch中一個分支.struct(st)--自動生成結(jié)構(gòu)類型定義.enum(en)--自動生成枚舉類型.func(fu)--生成標準的函數(shù)頭說明。該函數(shù)必須在該函數(shù)的前一行執(zhí)行,它能自動取得函數(shù)名,能夠自動取得函數(shù)的輸入、輸出參數(shù),并且排列好,同時生成日期和作者。能夠提示輸入功能描述,輸入的內(nèi)容能夠自動換行對齊。.hi--增加修改歷史列表。自動在該行增加修改歷史列表,用于文件頭和函數(shù)頭說明中的歷史記錄更新。

Quicker的實戰(zhàn)練習大家演練,演練后請一位同學上講臺演示操作Page54功能小結(jié)本章節(jié)主要講解了Quicker工具中經(jīng)常用到的宏,包括C語言常用命令的自動生成,標準說明的自動生成,修改問題單注釋的自動生成,其它擴展功能的宏。通過使用這些功能,可以提高編碼的效率,提高代碼的質(zhì)量。減少編碼過程中的人為差錯。SourceInsight的宏的功能非常強大,宏的功能主要在我們的.em文件中實現(xiàn),當大家非常熟悉了.em文件的語法之后,還可以直接編寫新的.em文件或者修改現(xiàn)有的文件來滿足特定的需求。如果有新的.em文件,只需要將文件加入到Base工程中就可以在其它工程中直接使用了(不同版本的SourceInsight可能會有小的差異)。Page55CodeReview功能介紹CodeReview工具是用來在代碼檢視時,記錄發(fā)現(xiàn)的缺陷或疑問。主要具有以下的特點:工具用于記錄代碼檢視意見,可以輸入檢視意見描述,意見級別。工具將自動記錄檢視意見的位置以及檢視者(檢視者通過config配置)工具生成的記錄文件是一個txt文件,該文件可以在工程中自動恢復(fù),方便作者找到檢視意見的具體位置工具生成的記錄可以直接導(dǎo)入到公司預(yù)審表單模板中,對于代碼檢視非常方便工具還可以進行檢視意見匯總。該工具必須同sourceinsight3.0(及以上)結(jié)合使用。該工具在安裝完SI助手之后已經(jīng)自動安裝。也可以通過把文件CodeReview.em加入到baseproject實現(xiàn)手動安裝。Page56CodeReview工具使用(一):工具集成在SI菜單中加入宏命令:選取"Options->MenuAssignment",并加入"Review_Add_Comment"到菜單edit下。也可以分配一個熱鍵給該命令,比如Ctrl+Alt+A(可通過圖中的Keys按鈕打開熱鍵設(shè)置窗口)按上面的方法,將宏"Macro:Review_Restore_Link"和"Macro:Review_Summary"加入到菜單中。Page57在菜單中加入選取“Review_Add_Comment”,則會彈出如下對話框提示輸入檢視意見的級別,主要有High,Medium,Low,Doc。(需要注意的是Low對應(yīng)的是檢視意見表單中的Suggestion)輸入級別之后,會彈出如下對話框提示輸入問題描述:輸入描述之后工具自動生成如下的一條檢視意見:FileName:\src\H248Stub.cLine:103Reviewer:zhangsanSymbol:MS_SetDynaEntitySeverity:MediumStatus:OpenComments:代碼存在缺陷CodeReview工具使用(二):AddCommentPage58RestoreLink功能非常簡單,只需要將通過CodeReview工具生成的.txt文件在工程中打開,然后執(zhí)行RestoreLink即可。成功后在檢視意見的左側(cè)會出現(xiàn)到文件內(nèi)容的鏈接按鈕。需要注意生成檢視意見的的工程代碼必須和恢復(fù)鏈接的工程代碼一致,否則會導(dǎo)致恢復(fù)錯誤。CodeReview工具使用(三):RestoreLinkPage59學員在前面練習的代碼上練習添加review意見和正反向鏈接。CodeReview工具演練大家演練,演練后請一位同學上講臺演示操作Page60第四部分:VC的調(diào)試方法Page61課程目標了解調(diào)試的常用功能熟練掌握調(diào)試的使用方法Page62調(diào)試基本功能介紹Restart(Ctrl+shift+F5):此debugger功能將從程序的開始(第一有效行)處全速執(zhí)行,而不是從當前所跟蹤的位置開始調(diào)試,這時所有變量的當前值都將被丟棄,debugger會自動停在程序的main()開始處.這時如果選擇StepOver(F10)就可以逐步執(zhí)行main()函數(shù)了.StopDebugging(Shift+F5):此debugger功能將終止(所有)調(diào)試,并返回到常規(guī)編輯狀態(tài).Break(此功能常常在遇到調(diào)用函數(shù)的語句時可見.):此功能將在調(diào)試過程中的debugger當前位置掛起程序的執(zhí)行,然后就可以在調(diào)試狀態(tài)一修改程序的代碼,接著可以用ApplyCodeChanges(Alt+F10)來應(yīng)用修改的代碼到正在調(diào)試的程序當中.如果,當前(需要,待)可以(從DOS等窗口)輸入值,掛起后將不能再輸入.ApplyCodeChanges(Alt+F10):此功能可以在程序正在調(diào)試程序過程中應(yīng)用(掛起)修改后的源代碼.如,選擇Break功能并修改代碼后,只要選擇ApplyCodeChanges(Alt+F10)就能將修改后的代碼應(yīng)用到正在調(diào)試的程序當中.Go(F5):此功能將全速執(zhí)行程序直到遇到一個斷點或程序結(jié)束,或直到程序暫停等待用戶輸入.

注意,此功能最能有效的調(diào)試循環(huán),常將斷點設(shè)置在循環(huán)體內(nèi),重復(fù)的按F5全速執(zhí)行循環(huán)體可以測試循環(huán)過程中的產(chǎn)生的變化.Insert/RemoveBreakpoint(F9):設(shè)置斷點。Page63StepInto(F11):此功能可以單步進入到在調(diào)試過程中所跟蹤的調(diào)用函數(shù)的語句的函數(shù)內(nèi)部.如,當前語句是"d.Display()",選擇StepInto(F11)后,Debugger將進入Display()函數(shù)內(nèi)部并停在Display()函數(shù)內(nèi)部的第一條語句上.(此時,就可以StepOver(F10)對Display()函數(shù)進行單步調(diào)試了.)StepOver(F10):此功能可以單步對所在函數(shù)單步調(diào)試,如果調(diào)試的語句是一個調(diào)用函數(shù)的語句時,StepOut(Shift+F11):此功能將使Debugger切換回全速執(zhí)行到被調(diào)用函數(shù)結(jié)束,并停在該函數(shù)調(diào)用語句的下一條語句上.當確定所調(diào)用的函數(shù)沒有問題時可以用這個功能全速執(zhí)行被調(diào)用函數(shù).RuntoCursor(Ctrl+F10):此功能將全速執(zhí)行到包含插入點光標所在的行,可以作為在插入點光標處設(shè)置常規(guī)斷點的一種選擇.注意,當光標處不是一個有效的執(zhí)行語句時此功能將不起作用.調(diào)試基本功能介紹ShowNextStatement(Alt+Num*):此功能將顯示程序代碼的下一條語句,如果源代碼中找不到,則在Disassembly窗口中顯示語句.Page64Variables:顯示所有當前執(zhí)行上下文中可見的變量的值。特別是當前指令涉及的變量,以紅色顯示。Registers:Debug:顯示當前的所有寄存器的值。Memory:由于指針指向的數(shù)組,Watch只能顯示第一個元素的值。為了顯示數(shù)組的后續(xù)內(nèi)容,或者要顯示一片內(nèi)存的內(nèi)容,可以使用memory功能。在Debug工具條上點memory按鈕,就彈出一個對話框,在其中輸入地址,就可以顯示該地址指向的內(nèi)存的內(nèi)容。CallStack:顯示函數(shù)的調(diào)用棧。調(diào)用堆棧反映了當前斷點處函數(shù)是被哪些函數(shù)按照什么順序調(diào)用的。單擊Debug工具條上的Callstack就顯示CallStack對話框。在CallStack對話框中顯示了一個調(diào)用系列,最上面的是當前函數(shù),往下依次是調(diào)用函數(shù)的上級函數(shù)。單擊這些函數(shù)名可以跳到對應(yīng)的函數(shù)中去。

調(diào)試基本功能介紹Watch:V

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論