版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
工具演練Jun2008InternalPage2課程大綱第一部分:SourceInsight使用第二部分:PC-LINT使用第三部分:CCChecker/Quicker/CodeReview使用第四部分:VC的調(diào)試方法第五部分:綜合實(shí)戰(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是一個(gè)支持多種開發(fā)語言(Java、C/C++/C#等等)的編輯器和瀏覽器,由于其查找、定位、彩色顯示等功能的強(qiáng)大,在我們的實(shí)際工作中得到廣泛的應(yīng)用。Page7SourceInsight工具使用(一):創(chuàng)建工程首先選擇主菜單中的“Project”選項(xiàng)的子菜單“NewProject”新建一個(gè)項(xiàng)目,此時(shí)會(huì)彈出一個(gè)對(duì)話框要求你選擇項(xiàng)目組文件存放的路徑以及項(xiàng)目文件名(用此testproject文件夾下文件建立工程)。Page8SourceInsight工具使用(一):創(chuàng)建工程選擇確認(rèn)后,將會(huì)彈出一個(gè)對(duì)話框,接受默認(rèn)選擇。如果硬盤空間足夠的話,可以將Configuration的第一個(gè)復(fù)選框選上,該選項(xiàng)將會(huì)占用與源代碼大致同等的空間來建立一個(gè)本地?cái)?shù)據(jù)庫以加快查找的速度。Page9SourceInsight工具使用(一):創(chuàng)建工程選擇“OK”按鈕,將會(huì)有另一個(gè)新的對(duì)話框彈出,在這個(gè)對(duì)話框里,可以選擇將要編輯、瀏覽的文件加入工程。一種方式是通過在FileName中輸入要閱讀源代碼文件的名稱,點(diǎn)擊“Add”按鈕將其加入,也可以通過其中“AddAll”和“AddTree”兩個(gè)按鈕可以將選中目錄的所有文件加入到工程中,其中“AddAll”選項(xiàng)會(huì)提示加入頂層文件和遞歸加入所有文件兩種方式,而“AddTree”相當(dāng)于“AddAll”選項(xiàng)的遞歸加入所有文件,可以根據(jù)需要使用。推薦使用“AddTree”方式。后續(xù)可以通過Project->AddandRemoveProjectFiles增加或者刪除工程中的文件。Page10SourceInsight工具使用(一):創(chuàng)建工程正確加入文件以后,Project基本上就建立完成了,此時(shí)建議執(zhí)行SynchronizeFile命令,同時(shí)選上“Forceallfilestobere-parsed”復(fù)選框,SourceInsight將會(huì)為項(xiàng)目中所有文件更新符號(hào)信息庫。Page11SourceInsight工具使用(二):
LookupReferencesLookupReferences可以說是SourceInsight實(shí)際使用中最常用的操作,它廣泛地應(yīng)用在各類查詢中。選中某個(gè)變量、函數(shù)后選擇菜單Search>LookupReferences或者使用快捷方式(CTRL+/)或者點(diǎn)擊工具欄上的就可以使用這項(xiàng)功能,它可以查詢項(xiàng)目中所有源文件,包括注釋、采用#ifdef定義的非激活代碼。
Options是搜索的選項(xiàng),包括是否區(qū)分大小寫,全字匹配,跳過非激活代碼,僅僅搜索注釋,啟動(dòng)優(yōu)化匹配,修改匹配文件的修改時(shí)間。
SearchMethod包含四種方式:SimpleString(簡(jiǎn)單字符串),RegularExpression(按照正則表達(dá)式的方式查詢),KeywordExpression(關(guān)鍵字查詢)LookupReference(按照引用關(guān)系進(jìn)行查詢,缺省查詢方式).Page12SourceInsight工具使用(二):
LookupReferences請(qǐng)?jiān)诠こ讨欣肧impleString(簡(jiǎn)單字符串),RegularExpression(按照正則表達(dá)式的方式查詢),KeywordExpression(關(guān)鍵字查詢)LookupReference(按照引用關(guān)系進(jìn)行查詢,缺省查詢方式)幾種方式查找全部變量MapULFlowCtrl,請(qǐng)注意觀察幾種查找方式的區(qū)別Page13SourceInsight工具使用(三):DocumentOptionsDocumentOptions允許你根據(jù)文件擴(kuò)展名定義它的編輯、顯示格式。執(zhí)行菜單Options>DocumentOption或者在打開的文件中點(diǎn)擊右鍵選擇DocumentOptions后,你將看到下圖的對(duì)話框,你可以通過對(duì)話框的AddType,RemoveType新增和刪除某類文件格式。因公司編程規(guī)范中明確要求不能使用TAB鍵,通過點(diǎn)中對(duì)話框中的Expandtabs自動(dòng)進(jìn)行Tab鍵擴(kuò)展。(默認(rèn)使用4空格替換Tab鍵,只能替換新增的代碼,舊代碼中可以通過宏替換,后續(xù)章節(jié)有相關(guān)講解)選中Showrightmargin設(shè)置頁面寬度標(biāo)記來查看代碼行是否超長(zhǎng)。(一般設(shè)置未80字符)選中Showlinenumber來在文件中顯示文件行號(hào)選中Visibletabs來查看代碼中是否還存在Tab鍵Page14SourceInsight工具使用(三):DocumentOptions實(shí)際操作:請(qǐng)利用DocumentOption幾個(gè)選項(xiàng)觀察函數(shù)correctness1)注意觀察文件中是否有Tab鍵2)空格是如何顯示3)選擇“ExtandTab”,按下Tab鍵,在代碼中出現(xiàn)的是什么字符4)選擇“Showrigthmargn”觀察右側(cè)出現(xiàn)什么分隔符Page15SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系在實(shí)際應(yīng)用中,你可以靈活地應(yīng)用RelationWindow查詢函數(shù)(包括全局變量,宏定義、結(jié)構(gòu)體等標(biāo)識(shí)符)的調(diào)用關(guān)系和引用關(guān)系,它能幫助你快速地了解整個(gè)項(xiàng)目工程的程序結(jié)構(gòu)。Relationwindow可以通過菜單View->RelationWindow或者快捷工具欄中的RelationWindow按鈕進(jìn)行打開/關(guān)閉操作。RelationWindow有多種視圖方式,可以通過窗口下方的按鈕選擇。Page16SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系RelationWindow主要包括3種關(guān)聯(lián)類型:Contains:顯示出當(dāng)前標(biāo)識(shí)符的內(nèi)容,例如結(jié)構(gòu)體變量會(huì)顯示出它的成員變量.Calls:顯示調(diào)用關(guān)系,常用于參看函數(shù)的調(diào)用關(guān)系,當(dāng)選中一個(gè)函數(shù)后,會(huì)顯示出該函數(shù)調(diào)用了哪些函數(shù)。References:顯示引用關(guān)系,常用于參看函數(shù)的引用關(guān)系,當(dāng)選中一個(gè)函數(shù)后,會(huì)顯示出該函數(shù)被哪些函數(shù)所引用。RelationWindow下面一些常用的工具按鈕,這些按鈕在實(shí)際使用過程中是十分有用的。Page17SourceInsight工具使用(四):查看函數(shù)調(diào)用關(guān)系實(shí)際操作:1)請(qǐng)查看函數(shù)collect_unmarked都是被哪些函數(shù)調(diào)用2)請(qǐng)查看函數(shù)collect_unmarked都是調(diào)用了哪些函數(shù)Page18SourceInsight工具使用(四):常用快捷鍵Shift+F8:高亮顯示某一函數(shù)或變量F7:在整個(gè)工程中匹配關(guān)鍵字F8:在當(dāng)前文件中匹配關(guān)鍵字CTRL+/:LookupReferencesShift+F9:下一個(gè)link標(biāo)簽Alt+,:后退進(jìn)光標(biāo)位置Alt+.:前進(jìn)光標(biāo)位置F9/F10:整行左/右縮進(jìn)一個(gè)TAB鍵雙擊{/}:選中和雙擊的括號(hào)匹配的括號(hào)之間的內(nèi)容Alt+{/}:到達(dá)成對(duì)的}/{位置Tab:增加4個(gè)空格對(duì)齊(可選中一段代碼Tab對(duì)齊)Shift+Tab:減除4個(gè)空格對(duì)齊,與Tab鍵相反Alt+Shift+S:同步工程文件Ctrl+F10:最大化/恢復(fù)當(dāng)前窗口Ctrl+O:打開工程文件列表(按ESC則關(guān)閉)Page19SourceInsight工具使用小結(jié)SourceInsight是一種基于項(xiàng)目工程的應(yīng)用程序,它將對(duì)項(xiàng)目工程中的文件進(jìn)行分析以后創(chuàng)建一個(gè)自身的數(shù)據(jù)庫用于記錄項(xiàng)目文件之間的聯(lián)系,并且能夠進(jìn)行動(dòng)態(tài)的更新。它能顯示語法符號(hào)(變量、函數(shù)、類等等)之間的引用樹,類的繼承流圖,以及調(diào)用樹,極大地提高了代碼的瀏覽速度;在進(jìn)行代碼的編輯,它會(huì)自動(dòng)地給出非常有用的相關(guān)信息。SourceInsight的功能非常豐富,上述提到的僅僅是我們比較常用功能中的一部分,詳細(xì)的功能使用可以參見《SourceInsight的使用指南.doc》。安裝完SI助手之后通過程序->SI助手可以找到該指南。Page20實(shí)際操作演練請(qǐng)獨(dú)立完成下面的操作:1)創(chuàng)建test1工程,加入代碼并且同步(testproject前面已經(jīng)創(chuàng)建)2)請(qǐng)打開工程窗口,查看該工程的所有文件3)請(qǐng)打開文件Driver.c文件3)請(qǐng)快速的打開函數(shù)verify_complete4)有個(gè)函數(shù)名稱現(xiàn)在僅記得其中包括XXXmyXXXXgetXXX,請(qǐng)快速找到該函數(shù)5)在函數(shù)mysound4中,請(qǐng)找到變量soundpd1的定義,看完定義后,還回到原來的函數(shù)。大家演練,演練后請(qǐng)一位同學(xué)上講臺(tái)演示操作Page21第二部分:PC-LINT使用Page22課程目標(biāo)了解PC-LINT工具的基本概念掌握PC-LINT在SourceInsight中使用方法熟練使用PC-LINT進(jìn)行檢查。Page23PC-LINT是什么?能干什么?(一)(1)PC-Lint是一種靜態(tài)代碼檢測(cè)工具,可以說,PC-LINT是一種更加嚴(yán)格的編譯器,不僅可以象普通編譯器那樣檢查出一般的語法錯(cuò)誤,還可以檢查出那些雖然完全合乎語法要求,但很可能是潛在的、不易發(fā)現(xiàn)的錯(cuò)誤,例如:數(shù)組下標(biāo)非法,變量未被初始化,使用空指針,冗余的代碼等等,幫助您在動(dòng)態(tài)測(cè)試之前發(fā)現(xiàn)編碼錯(cuò)誤,降低消除錯(cuò)誤的成本。例如: 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è)單個(gè)文件,也可以從整個(gè)項(xiàng)目的角度來檢測(cè)問題,因?yàn)镃語言編譯器固有的單個(gè)編譯,這些問題在編譯器環(huán)境下很難被檢測(cè),而PC-Lint在檢查當(dāng)前文件的同時(shí)還會(huì)檢查所有與之相關(guān)的文件,可想而知,它會(huì)對(duì)我們有很大的幫助(3)PC-lint支持幾乎所有流行的編輯環(huán)境和編譯器,比如BorlandC++從1.x到5.x各個(gè)版本、BorlandC++、GCC、VC,VC.net、Sourceinsight、intelC/C++等等,也支持16/32/64的平臺(tái)環(huán)境(4)支持ScottMeyes的名著(EffectiveC++/MoreEffectiveC++)中說描述的各種提高效率和防止錯(cuò)誤的方法Page25PC-LINT是什么?能干什么?(三)案例分享:看一個(gè)真實(shí)的慘痛案例!將案例簡(jiǎn)單模擬如下:structperson{ char*name; char*address;};voidfunc1(){ structpersonstBob; // free(stB);//由于stBob沒有初始化所以stB指向的可能是一個(gè)野指針,//釋放可能出現(xiàn)各種異常(包括死機(jī)等)
//}對(duì)于變量沒有初始化的情況,PC-LINT工具能檢查出來的。公司對(duì)PC-LINT明確要求:告警為零Page26PC-LINT的安裝安裝路徑:
\\szxfs08-pub\RND_SOFT_F\Software\1.FreetoInstall\Standard\PC-lintV80安裝步驟:與普通應(yīng)用軟件的向?qū)е敢惭b一樣,簡(jiǎn)單描述一下:(1)給出PC-Lint的安裝路徑和選擇設(shè)置的保存文件。(2)選擇你所使用的C/C++編譯器:比如VisualC++6.x/UnixC/C++等。(3)選擇內(nèi)存模式:比如32bitFlatModel。(4)選擇所使用的庫:比如MFC,OWL,等,可多選,在windows下開發(fā)的一般要選中windows32bit。(5)C++編程提出過重要建議的作者,選擇某作者后,他提出的編程建議方面的選項(xiàng)將被打開:比如ScottMeyers,可不選。(6)頭文件的設(shè)置:可在后面步驟中手工添加。(7)詳細(xì)的PCLINT參考手冊(cè)在安裝目錄下:C:\lint\pc-lint.pdf。上述安裝配置可以不用關(guān)心,各產(chǎn)品都會(huì)根據(jù)自己的開發(fā)環(huán)境發(fā)布標(biāo)準(zhǔn)的配置??赡苓BPC-LINT都不用安裝,直接拷貝產(chǎn)品的標(biāo)準(zhǔn)Lint目錄就可以使用了!Page27PC-LINT整合到編輯環(huán)境中使用(一)以SourceInsight為例介紹整合過程1、請(qǐng)直接拷貝文件夾“免安裝版軟件”中的整個(gè)“Lint”文件夾到C盤根目錄2、在option.lnt文件中添加工程頭文件路徑,打開option.lnt有詳細(xì)的解釋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小實(shí)踐小結(jié)Page30PC-LINT發(fā)現(xiàn)問題的機(jī)理(1)檢查源文件及其訪問的資源,對(duì)可能存在問題的代碼行顯示告警信息,由于錯(cuò)誤會(huì)多種多樣,PC-LINT對(duì)告警進(jìn)行了分類。(2)首先按照嚴(yán)重程度分為Error、Warning、Info等幾個(gè)級(jí)別。(3)然后在每一級(jí)又根據(jù)錯(cuò)誤類型設(shè)置了很多告警編號(hào)。這些告警號(hào)的含義都可以在安裝目錄的msg.txt中找到。注意:雖然分級(jí)別,但是并不是所有info告警的嚴(yán)重程度就一定低于warning!Page31PC-LINT告警分類錯(cuò)誤分類CC++SyntaxErrors1-1991001-1199InternalErrors200-299FatalErrors300-399Warnings400-6991400-1699Informational700-8991700-1899ElectiveNotes900-9991900-1999Page32PC-LINT告警詳解(一)第一類(錯(cuò)誤及極可能導(dǎo)致出錯(cuò)處)1、錯(cuò)誤1-199
明令禁止的2、未初始化
530: 變量未初始化
644-645: 變量可能沒有初始化
727-729: 變量未明確初始化3、返回值
533: 函數(shù)需要(不需要)返回值4、比較:
568,775: 無符號(hào)數(shù)永遠(yuǎn)不會(huì)小于0 650: 常量超過比較對(duì)象所能表示的范圍5、聲明
578: 局部變量和全局變量定義沖突Page33PC-LINT告警詳解(二)第二類(可能的錯(cuò)誤,需判斷程序邏輯)1、布爾值
774: Booleanwithin‘String’alwaysevaluatesto[True/False]2、精度損失
569: 丟失信息,常量賦值
734: 丟失精度,變量之間傳遞值
732,570: 丟失符號(hào)
571: 可疑的強(qiáng)制類型轉(zhuǎn)換?
616: switch…case…語句缺少break3、返回值
534: 忽略返回值4、邊界值
661: 訪問邊界以外的指針,
662: 對(duì)指針進(jìn)行操作時(shí),使得指針的范圍超過有效范圍5、空指針
413: 對(duì)空指針進(jìn)行操作,比如*,++,--操作
613: 與413類似
668: 將空指針傳遞給函數(shù)Page34PC-LINT告警詳解(三)6、switch語句
744: switch…case語句沒有default語句使用
787: switch…case語句中使用枚舉類型,但是有一個(gè)值沒有出現(xiàn)在case中7、未用的代碼和變量
527: 代碼不可達(dá),也就是冗余代碼
528: 靜態(tài)變量或靜態(tài)函數(shù)只聲明但沒有定義
529: 變量進(jìn)行了定義,但是后續(xù)沒有使用
715: 參數(shù)未被使用,函數(shù)定義了一個(gè)參數(shù),但是函數(shù)中沒有使用
550: 局部變量沒有被使用
551: 靜態(tài)變量沒有被使用
552: 外部變量沒有被使用8、賦值
522: 語句僅僅包含一個(gè)表達(dá)式,沒有產(chǎn)生任何的結(jié)果可能有遺漏
9、參數(shù)
515: 參數(shù)個(gè)數(shù)不匹配,函數(shù)定義的參數(shù)和調(diào)用時(shí)不符
516: 參數(shù)類型不匹配Page35課程大綱PC-LINT概述PC-LINT安裝和配置PC-LINT詳解PC-LINT小實(shí)踐小結(jié)Page36PC-LINT小實(shí)踐1、前置條件:已經(jīng)安裝和配置了PC-LINT,并將它整合到SourceInsight中,菜單中的PCLINT_Current功能項(xiàng)也已經(jīng)關(guān)聯(lián)了PC-LINT命令。2、待PC-LINT的文件:3、先使用PC-LINT工具檢查錯(cuò)誤,再看看如何將這些錯(cuò)誤消除。大家演練,演練后請(qǐng)一位同學(xué)上講臺(tái)演示操作Page37課程大綱PC-LINT概述PC-LINT安裝和配置PC-LINT詳解PC-LINT小實(shí)踐小結(jié)Page38課程小結(jié)小結(jié)1:PC-LINT工具可以在代碼編輯階段發(fā)現(xiàn)各種語法錯(cuò)誤或者合乎語法的潛在錯(cuò)誤,提高代碼的質(zhì)量,降低排查錯(cuò)誤的成本。小結(jié)2:PC-LINT工具可以和各種編輯器整合使用,進(jìn)行可視化的、批量的檢查。小結(jié)3:PC-LINT僅僅是檢查出可能存在的隱患,代碼是否有問題?如何處理問題?需要人工具體問題具體分析,不能盲目的追求零告警。Page39第三部分:CCChecker/Quicker/CodeReview使用Page40圈復(fù)雜度工具--CCChecker功能介紹CCChecker是圈復(fù)雜度度量工具,用以及時(shí)發(fā)現(xiàn)代碼中最復(fù)雜的地方。CCChecker極大的方便了開發(fā)人員在開發(fā)中隨時(shí)檢查代碼圈復(fù)雜度的情況。CCChecker工具包括了三個(gè)度量功能:版本圈復(fù)雜度比對(duì)功能;單個(gè)文件圈復(fù)雜度度量功能;單個(gè)函數(shù)圈復(fù)雜度度量功能。Page41圈復(fù)雜度工具—CCChecker的安裝1、安裝CCChecker.安裝:雙擊安裝包,采用默認(rèn)安裝方式安裝。本課程附帶了安裝包,如果因C盤權(quán)限問題可直接拷貝本課程安裝后的文件:直接拷貝“免安裝版軟件”文件夾中的“CCChecker”文件夾到C盤根目錄2、配置在開始菜單中選擇Programe->CCChecker->Help->ConfigGuide,即可打開文檔,按照文檔說明進(jìn)行CCChecker在sourceinsight中的集成。直接拷貝時(shí)請(qǐng)參見:圈復(fù)雜度工具手工配置方法Page42圈復(fù)雜度工具--CCChecker使用對(duì)單文件執(zhí)行檢查結(jié)果:對(duì)單函數(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,對(duì)于圈復(fù)雜度大于15的代碼,需經(jīng)過分析確認(rèn)為良性設(shè)計(jì)。產(chǎn)品線軟件工程部可為分析提供仲裁或技術(shù)支持。2、對(duì)于老代碼的修改要求為:圈復(fù)雜度大于15的老代碼,修改后的圈復(fù)雜度不能大于修改以前的;圈復(fù)雜度不大于15的老代碼,修改后的圈復(fù)雜度也不大于15。3、版本轉(zhuǎn)測(cè)試時(shí),由開發(fā)負(fù)責(zé)人提供新增函數(shù)的圈復(fù)雜度和版本平均圈復(fù)雜度的度量報(bào)告。Page45實(shí)際應(yīng)用演練主要演練以下內(nèi)容:使用CCChecker對(duì)前面已建立的工程演練用的代碼進(jìn)行檢查。大家演練,演練后請(qǐng)一位同學(xué)上講臺(tái)演示操作Page46Quicker的基本功能介紹標(biāo)準(zhǔn)C語言擴(kuò)展標(biāo)準(zhǔn)說明生成代碼修改注釋其它常用的宏P(guān)age47安裝SI助手直接安裝--SI助手1.4b.如果遇到C盤權(quán)限問題,則:直接拷貝“免安裝版軟件”文件夾中的“SI助手”文件夾到C盤根目錄。Page48Quicker工具集成到SouceInsight中1、把宏加入到BASE工程:選取“sourceinsight->
Project->OpenProject”,打開默認(rèn)的Base工程,利用“sourceinsight->
Project->AddandRemoveProjectFiles”,把“C:\SI助手\backup”中的文件:quicker.em加入到工程,然后,
利用“Project->SynchronizeFiles”進(jìn)行同步
。2、設(shè)置快捷鍵sourceinsight->
options->MenuAssignments…把宏“AutoExpand”加到菜單中并設(shè)置快捷鍵Page49Quicker的基本功能(一):標(biāo)準(zhǔn)C語言擴(kuò)展./*
--自動(dòng)生成/**/,如果出現(xiàn)換行,工具會(huì)自動(dòng)對(duì)齊.{
--自動(dòng)生成{}.while(wh)--自動(dòng)生成While語句.if--自動(dòng)生成if語句(ife,ifs生成對(duì)應(yīng)格式的if語句).for
--自動(dòng)生成for語句.fo
--自動(dòng)生成for語句,增加了自動(dòng)定義循環(huán)變量功能.do
--自動(dòng)生成dowhile語句.#ifd--自動(dòng)生成#ifdef命令.#ifn--自動(dòng)生成#ifndef命令.#if--自動(dòng)生成#if命令.cpp
--自動(dòng)生成適用于c++的c原型說明定義.switch(sw)
--自動(dòng)生成switch語句,可以通過拷貝case值自動(dòng)生成.case(ca)--自動(dòng)生成case語句,用于增加switch中一個(gè)分支.struct(st)--自動(dòng)生成結(jié)構(gòu)類型定義.enum(en)--自動(dòng)生成枚舉類型Page50Quicker的基本功能(二):標(biāo)準(zhǔn)說明生成.config(co)--配置用戶名和標(biāo)題的說明語種。用戶名就是前面自動(dòng)生成的作者,修改者的名字,語種,就是前面提到的文件頭說明和函數(shù)頭說明所
采用的的語言有中文和英文兩種選擇
.file(fi)--生成標(biāo)準(zhǔn)的文件頭。它能自動(dòng)取得文件名,作者名,時(shí)間
,以及函數(shù)列表,而且在生成的過程中會(huì)主動(dòng)彈出功能描述能的內(nèi)容輸入
對(duì)話框(提示對(duì)話框只能輸入256個(gè)字符),輸入的內(nèi)容能夠自動(dòng)換行對(duì)齊.func(fu)--生成標(biāo)準(zhǔn)的函數(shù)頭說明。該函數(shù)必須在該函數(shù)的前一行執(zhí)
行,它能自動(dòng)取得函數(shù)名,能夠自動(dòng)取得函數(shù)的輸入、輸出參數(shù),并且排
列好,同時(shí)生成日期和作者。能夠提示輸入功能描述,輸入的內(nèi)容能夠自
動(dòng)換行對(duì)齊。.hi
--增加修改歷史列表。自動(dòng)在該行增加修改歷史列表,用
于文件頭和函數(shù)頭說明中的歷史記錄更新。.hd--自動(dòng)生成函數(shù)頭文件。該命令能夠自動(dòng)生成但前C文件的
頭文件定義,包括常用的宏定義,還有全部的函數(shù)原型定義。.Hdn--生成新的有文件。該命令能夠自動(dòng)生成指定的的頭文件定
義,包括常用的宏定義,提示輸入函數(shù)原型的類型。Page51Quicker的基本功能(三):代碼修改注釋.pn
--添加問題單號(hào),工具會(huì)記下單號(hào),后續(xù)需要的地方自動(dòng)使用.a(chǎn)p--添加問題單修改說明。其中輸入的問題單號(hào)具有pn功能.a(chǎn)b
--添加問題修改(增加代碼)開始說明。問題單號(hào)使用之前pn或者ap設(shè)定的.a(chǎn)e
--添加問題修改(增加代碼)結(jié)束說明。和ab對(duì)應(yīng).a(chǎn)bg--添加問題修改(增加代碼)開始和結(jié)束說明。一次性完成ab和ae的功能.db--添加問題修改(刪除代碼)開始說明。問題單號(hào)使用之前pn或者ap設(shè)定的.de
--添加問題修改(刪除代碼)結(jié)束說明。和db對(duì)應(yīng).dbg
--添加問題修改(刪除代碼)開始和結(jié)束說明。一次性完成db和de的功能.mb--添加問題修改(修改代碼)開始說明。問題單號(hào)使用之前pn或者ap設(shè)定的.me
--添加問題修改(修改代碼)結(jié)束說明。和mb對(duì)應(yīng).mbg--添加問題修改(修改代碼)開始和結(jié)束說明。一次性完成mb和me的功能Page52Quicker的基本功能(四):其它常用的宏下面的宏需要通過設(shè)置快捷鍵或者菜單來完成的:.ComentCPPtoC
:將從C++的//注釋改為標(biāo)準(zhǔn)的C/**/注釋。
可以一次選中多行同時(shí)修改.ReplaceBufTab
:替換當(dāng)前文件中的所有Tab鍵.ReplaceTabInProj
:替換所有工程文件中的Tab鍵.InsertFuncName
:
插入當(dāng)前的函數(shù)名。會(huì)將函數(shù)名插入到光標(biāo)處.InsertTraceInfo
:
在函數(shù)的出、入口首尾加入打印代碼.AutoInsertTraceInfoInBuf
:在當(dāng)前文件的函數(shù)出入口加入打印信息.AutoInsertTraceInfoInPrj
:在當(dāng)前工程的函數(shù)出入口加入打印信息.RemoveTraceInfo
:刪除InsertTraceInfo()添加的打印信息.RemoveCurBufTraceInfo
:刪除文件中InsertTraceInfo()添加的打印信息.RemovePrjTraceInfo
:刪除工程中InsertTraceInfo()添加的打印信息.FormatLine
:自動(dòng)格式當(dāng)前行。自動(dòng)完成超長(zhǎng)行的換行以及對(duì)齊.UpdateFunctionList
:能夠自動(dòng)在光標(biāo)所在行重新生成函數(shù)列表.Review_Add_Comment
:增加檢視記錄。這個(gè)有專門的CodeReview工具。.DelCompoundStatement
:復(fù)合語句刪除。其它還存在大量的宏:可以在SourceInsight中Options->KeyAssignments彈出的對(duì)話框Command項(xiàng)輸入Macro看下面列出的所有宏P(guān)age53學(xué)員新建一個(gè).c,熟練執(zhí)行下面的功能:/*--自動(dòng)生成/**/,如果出現(xiàn)換行,工具會(huì)自動(dòng)對(duì)齊.{--自動(dòng)生成{}.while(wh)--自動(dòng)生成While語句.if--自動(dòng)生成if語句。(ife,ifs生成對(duì)應(yīng)格式的if語句).for--自動(dòng)生成for語句.switch(sw)--自動(dòng)生成switch語句,可以通過拷貝case值自動(dòng)生成.case(ca)--自動(dòng)生成case語句,用于增加switch中一個(gè)分支.struct(st)--自動(dòng)生成結(jié)構(gòu)類型定義.enum(en)--自動(dòng)生成枚舉類型.func(fu)--生成標(biāo)準(zhǔn)的函數(shù)頭說明。該函數(shù)必須在該函數(shù)的前一行執(zhí)行,它能自動(dòng)取得函數(shù)名,能夠自動(dòng)取得函數(shù)的輸入、輸出參數(shù),并且排列好,同時(shí)生成日期和作者。能夠提示輸入功能描述,輸入的內(nèi)容能夠自動(dòng)換行對(duì)齊。.hi--增加修改歷史列表。自動(dòng)在該行增加修改歷史列表,用于文件頭和函數(shù)頭說明中的歷史記錄更新。
Quicker的實(shí)戰(zhàn)練習(xí)大家演練,演練后請(qǐng)一位同學(xué)上講臺(tái)演示操作Page54功能小結(jié)本章節(jié)主要講解了Quicker工具中經(jīng)常用到的宏,包括C語言常用命令的自動(dòng)生成,標(biāo)準(zhǔn)說明的自動(dòng)生成,修改問題單注釋的自動(dòng)生成,其它擴(kuò)展功能的宏。通過使用這些功能,可以提高編碼的效率,提高代碼的質(zhì)量。減少編碼過程中的人為差錯(cuò)。SourceInsight的宏的功能非常強(qiáng)大,宏的功能主要在我們的.em文件中實(shí)現(xiàn),當(dāng)大家非常熟悉了.em文件的語法之后,還可以直接編寫新的.em文件或者修改現(xiàn)有的文件來滿足特定的需求。如果有新的.em文件,只需要將文件加入到Base工程中就可以在其它工程中直接使用了(不同版本的SourceInsight可能會(huì)有小的差異)。Page55CodeReview功能介紹CodeReview工具是用來在代碼檢視時(shí),記錄發(fā)現(xiàn)的缺陷或疑問。主要具有以下的特點(diǎn):工具用于記錄代碼檢視意見,可以輸入檢視意見描述,意見級(jí)別。工具將自動(dòng)記錄檢視意見的位置以及檢視者(檢視者通過config配置)工具生成的記錄文件是一個(gè)txt文件,該文件可以在工程中自動(dòng)恢復(fù),方便作者找到檢視意見的具體位置工具生成的記錄可以直接導(dǎo)入到公司預(yù)審表單模板中,對(duì)于代碼檢視非常方便工具還可以進(jìn)行檢視意見匯總。該工具必須同sourceinsight3.0(及以上)結(jié)合使用。該工具在安裝完SI助手之后已經(jīng)自動(dòng)安裝。也可以通過把文件CodeReview.em加入到baseproject實(shí)現(xiàn)手動(dòng)安裝。Page56CodeReview工具使用(一):工具集成在SI菜單中加入宏命令:選取"Options->MenuAssignment",并加入"Review_Add_Comment"到菜單edit下。也可以分配一個(gè)熱鍵給該命令,比如Ctrl+Alt+A(可通過圖中的Keys按鈕打開熱鍵設(shè)置窗口)按上面的方法,將宏"Macro:Review_Restore_Link"和"Macro:Review_Summary"加入到菜單中。Page57在菜單中加入選取“Review_Add_Comment”,則會(huì)彈出如下對(duì)話框提示輸入檢視意見的級(jí)別,主要有High,Medium,Low,Doc。(需要注意的是Low對(duì)應(yīng)的是檢視意見表單中的Suggestion)輸入級(jí)別之后,會(huì)彈出如下對(duì)話框提示輸入問題描述:輸入描述之后工具自動(dòng)生成如下的一條檢視意見:FileName:\src\H248Stub.cLine:103Reviewer:zhangsanSymbol:MS_SetDynaEntitySeverity:MediumStatus:OpenComments:代碼存在缺陷CodeReview工具使用(二):AddCommentPage58RestoreLink功能非常簡(jiǎn)單,只需要將通過CodeReview工具生成的.txt文件在工程中打開,然后執(zhí)行RestoreLink即可。成功后在檢視意見的左側(cè)會(huì)出現(xiàn)到文件內(nèi)容的鏈接按鈕。需要注意生成檢視意見的的工程代碼必須和恢復(fù)鏈接的工程代碼一致,否則會(huì)導(dǎo)致恢復(fù)錯(cuò)誤。CodeReview工具使用(三):RestoreLinkPage59學(xué)員在前面練習(xí)的代碼上練習(xí)添加review意見和正反向鏈接。CodeReview工具演練大家演練,演練后請(qǐng)一位同學(xué)上講臺(tái)演示操作Page60第四部分:VC的調(diào)試方法Page61課程目標(biāo)了解調(diào)試的常用功能熟練掌握調(diào)試的使用方法Page62調(diào)試基本功能介紹Restart(Ctrl+shift+F5):此debugger功能將從程序的開始(第一有效行)處全速執(zhí)行,而不是從當(dāng)前所跟蹤的位置開始調(diào)試,這時(shí)所有變量的當(dāng)前值都將被丟棄,debugger會(huì)自動(dòng)停在程序的main()開始處.這時(shí)如果選擇StepOver(F10)就可以逐步執(zhí)行main()函數(shù)了.StopDebugging(Shift+F5):此debugger功能將終止(所有)調(diào)試,并返回到常規(guī)編輯狀態(tài).Break(此功能常常在遇到調(diào)用函數(shù)的語句時(shí)可見.):此功能將在調(diào)試過程中的debugger當(dāng)前位置掛起程序的執(zhí)行,然后就可以在調(diào)試狀態(tài)一修改程序的代碼,接著可以用ApplyCodeChanges(Alt+F10)來應(yīng)用修改的代碼到正在調(diào)試的程序當(dāng)中.如果,當(dāng)前(需要,待)可以(從DOS等窗口)輸入值,掛起后將不能再輸入.ApplyCodeChanges(Alt+F10):此功能可以在程序正在調(diào)試程序過程中應(yīng)用(掛起)修改后的源代碼.如,選擇Break功能并修改代碼后,只要選擇ApplyCodeChanges(Alt+F10)就能將修改后的代碼應(yīng)用到正在調(diào)試的程序當(dāng)中.Go(F5):此功能將全速執(zhí)行程序直到遇到一個(gè)斷點(diǎn)或程序結(jié)束,或直到程序暫停等待用戶輸入.
注意,此功能最能有效的調(diào)試循環(huán),常將斷點(diǎn)設(shè)置在循環(huán)體內(nèi),重復(fù)的按F5全速執(zhí)行循環(huán)體可以測(cè)試循環(huán)過程中的產(chǎn)生的變化.Insert/RemoveBreakpoint(F9):設(shè)置斷點(diǎn)。Page63StepInto(F11):此功能可以單步進(jìn)入到在調(diào)試過程中所跟蹤的調(diào)用函數(shù)的語句的函數(shù)內(nèi)部.如,當(dāng)前語句是"d.Display()",選擇StepInto(F11)后,Debugger將進(jìn)入Display()函數(shù)內(nèi)部并停在Display()函數(shù)內(nèi)部的第一條語句上.(此時(shí),就可以StepOver(F10)對(duì)Display()函數(shù)進(jìn)行單步調(diào)試了.)StepOver(F10):此功能可以單步對(duì)所在函數(shù)單步調(diào)試,如果調(diào)試的語句是一個(gè)調(diào)用函數(shù)的語句時(shí),StepOut(Shift+F11):此功能將使Debugger切換回全速執(zhí)行到被調(diào)用函數(shù)結(jié)束,并停在該函數(shù)調(diào)用語句的下一條語句上.當(dāng)確定所調(diào)用的函數(shù)沒有問題時(shí)可以用這個(gè)功能全速執(zhí)行被調(diào)用函數(shù).RuntoCursor(Ctrl+F10):此功能將全速執(zhí)行到包含插入點(diǎn)光標(biāo)所在的行,可以作為在插入點(diǎn)光標(biāo)處設(shè)置常規(guī)斷點(diǎn)的一種選擇.注意,當(dāng)光標(biāo)處不是一個(gè)有效的執(zhí)行語句時(shí)此功能將不起作用.調(diào)試基本功能介紹ShowNextStatement(Alt+Num*):此功能將顯示程序代碼的下一條語句,如果源代碼中找不到,則在Disassembly窗口中顯示語句.Page64Variables:顯示所有當(dāng)前執(zhí)行上下文中可見的變量的值。特別是當(dāng)前指令涉及的變量,以紅色顯示。Registers:Debug:顯示當(dāng)前的所有寄存器的值。Memory:由于指針指向的數(shù)組,Watch只能顯示第一個(gè)元素的值。為了顯示數(shù)組的后續(xù)內(nèi)容,或者要顯示一片內(nèi)存的內(nèi)容,可以使用memory功能。在Debug工具條上點(diǎn)memory按鈕,就彈出一個(gè)對(duì)話框,在其中輸入地址,就可以顯示該地址指向的內(nèi)存的內(nèi)容。CallStack:顯示函數(shù)的調(diào)用棧。調(diào)用堆棧反映了當(dāng)前斷點(diǎn)處函數(shù)是被哪些函數(shù)按照什么順序調(diào)用的。單擊Debug工具條上的Callstack就顯示CallStack對(duì)話框。在CallStack對(duì)話框中顯示了一個(gè)調(diào)用系列,最上面的是當(dāng)前函數(shù),往下依次是調(diào)用函數(shù)的上級(jí)函數(shù)。單擊這些函數(shù)名可以跳到對(duì)應(yīng)的函數(shù)中去。
調(diào)試基本功能介紹Watch:V
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版果樹病蟲害防治與種植承包合同3篇
- 影視項(xiàng)目2025年度演員選角服務(wù)合同2篇
- 二零二五版餐飲業(yè)與旅行社跨界融合合同3篇
- 二零二五版電力設(shè)施拆除與再利用合同模板3篇
- 安徽省二零二五年度事業(yè)單位圖書館管理員聘用合同3篇
- 二零二五版集體房屋買賣合同及社區(qū)文化活動(dòng)服務(wù)協(xié)議3篇
- 二零二五年度高端酒水品牌對(duì)外承包經(jīng)營合同范本3篇
- 二零二五年度高速公路收費(fèi)員勞動(dòng)合同解除與補(bǔ)償標(biāo)準(zhǔn)合同3篇
- 二零二五版果園租賃與農(nóng)業(yè)循環(huán)經(jīng)濟(jì)合同2篇
- 二零二五版廣告創(chuàng)意策劃執(zhí)行合同3篇
- Unit 3 We should obey the rules. Lesson15(說課稿)-2023-2024學(xué)年人教精通版英語五年級(jí)下冊(cè)
- 綿陽市高中2022級(jí)(2025屆)高三第二次診斷性考試(二診)語文試卷(含答案)
- 2024年聊城市東昌府區(qū)中醫(yī)院招聘?jìng)浒钢乒ぷ魅藛T考試真題
- 2025年極兔速遞有限公司招聘筆試參考題庫含答案解析
- 一般固廢處理流程
- 《健康體檢知識(shí)》課件
- 《AIGC應(yīng)用實(shí)戰(zhàn)(慕課版)》-課程標(biāo)準(zhǔn)
- 政府機(jī)關(guān)辦公用品配送方案
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- 永威置業(yè)項(xiàng)目交付前風(fēng)險(xiǎn)排查表
- 《儲(chǔ)能材料與器件》課程教學(xué)大綱(新能源材料與器件專業(yè))
評(píng)論
0/150
提交評(píng)論