偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Xcode執(zhí)行靜態(tài)代碼分析

移動(dòng)開(kāi)發(fā) iOS
在項(xiàng)目的開(kāi)發(fā)之中,每個(gè)開(kāi)發(fā)者最激動(dòng)最高興看到的是自己編寫(xiě)的代碼,不用太多的調(diào)試就可以暢通無(wú)阻的運(yùn)行,無(wú)任何bug侵襲。但這只是個(gè)理想的狀態(tài),看起來(lái)運(yùn)行良好的代碼往往都會(huì)存在潛在位置的bug,這是每位開(kāi)發(fā)者最頭痛的事,也是每位開(kāi)發(fā)者都想極力避免的事情。所以如果手頭用到的IDE能夠比較給力的話(huà),那么我們就可以避免程序中許多的bug。Xcode作為一款強(qiáng)大的Objective-C的IDE,其內(nèi)置提供了很多開(kāi)發(fā)工具來(lái)輔助開(kāi)發(fā)者的日常開(kāi)發(fā)工作,最大限度的降低開(kāi)發(fā)難度,本篇簡(jiǎn)單介紹下Xcode中的靜態(tài)代碼分析功能。

在項(xiàng)目的開(kāi)發(fā)之中,每個(gè)開(kāi)發(fā)者最激動(dòng)最高興看到的是自己編寫(xiě)的代碼,不用太多的調(diào)試就可以暢通無(wú)阻的運(yùn)行,無(wú)任何bug侵襲。但這只是個(gè)理想的狀態(tài),看起 來(lái)運(yùn)行良好的代碼往往都會(huì)存在潛在位置的bug,這是每位開(kāi)發(fā)者最頭痛的事,也是每位開(kāi)發(fā)者都想極力避免的事情。所以如果手頭用到的IDE能夠比較給力的 話(huà),那么我們就可以避免程序中許多的bug。Xcode作為一款強(qiáng)大的Objective-C的IDE,其內(nèi)置提供了很多開(kāi)發(fā)工具來(lái)輔助開(kāi)發(fā)者的日常開(kāi)發(fā) 工作,最大限度的降低開(kāi)發(fā)難度,本篇簡(jiǎn)單介紹下Xcode中的靜態(tài)代碼分析功能。

靜態(tài)分析的主要目的:

代碼中的bug往往是由于開(kāi)發(fā)者忽略一些代碼缺陷而造成的,這些代碼缺陷可能是極其微小的錯(cuò)誤,以至于在程序的編譯期并未給出很好的錯(cuò)誤, 從而導(dǎo)致這些代碼缺陷在程序的運(yùn)行期以某種非正常形式呈現(xiàn)出來(lái)。那么對(duì)于開(kāi)發(fā)這開(kāi)說(shuō),這些微小的代碼缺陷,往往是很難跟蹤調(diào)試的,因此也為修復(fù)代碼帶來(lái)了 很大困難。Xcode靜態(tài)代碼分析的作用即發(fā)現(xiàn)項(xiàng)目源代碼中的某些代碼缺陷,并分類(lèi)進(jìn)行提示,以方便開(kāi)發(fā)者及時(shí)關(guān)注并加以修改,從而把代碼缺陷(潛在的 bug)及時(shí)清除。

靜態(tài)分析錯(cuò)誤提示分類(lèi):

Xocde的靜態(tài)代碼分析工具會(huì)接卸項(xiàng)目的源代碼,并以以下集中錯(cuò)誤類(lèi)型加以標(biāo)識(shí):

  • 邏輯缺陷,例如訪(fǎng)問(wèn)未初始化的變量或空指針的解引用
  • 內(nèi)存管理缺陷,如內(nèi)存泄露
  • 無(wú)用存儲(chǔ)缺陷(永不會(huì)被訪(fǎng)問(wèn)的變量)
  • 因未遵從項(xiàng)目用到的框架(frameworks)或類(lèi)庫(kù)(libraries)所規(guī)范而導(dǎo)致的API使用缺陷 

第一次在項(xiàng)目中執(zhí)行靜態(tài)分析時(shí),可能會(huì)發(fā)現(xiàn)許多錯(cuò)誤。但經(jīng)常性的執(zhí)行靜態(tài)分析并修復(fù)發(fā)現(xiàn)的代碼缺陷,之后的遇到的錯(cuò)誤會(huì)越來(lái)越少。這對(duì)于編寫(xiě)強(qiáng)壯的代碼是很有幫助的。

但要注意的是,靜態(tài)分析未報(bào)告錯(cuò)誤,并不意味者程序沒(méi)有錯(cuò)誤。靜態(tài)分析工具并不是萬(wàn)能的,不會(huì)檢測(cè)到源代碼中的所有錯(cuò)誤。

靜態(tài)代碼分析的使用舉例:

以新建StaticCodeAnalysisDemo功能為例。新建MJIssueViewController測(cè)試文件,并編寫(xiě)兩個(gè)會(huì)提示靜態(tài)分析錯(cuò)誤的測(cè)試方法,代碼如下:

  1. // Dead store 
  2.     - (void)issueCodeBlockA 
  3.     { 
  4.         CGRect frame = CGRectMake(0.0, 0.0, 100, 100); 
  5.     } 
  6.       
  7.     // Memory , Potential leak of an object 
  8.     - (CGGradientRef)issueCodeBlockB 
  9.     { 
  10.         CGGradientRef gradient ; 
  11.         CGColorSpaceRef colorSapce = CGColorSpaceCreateDeviceRGB() ; 
  12.         CGFloat components[16] = { 
  13.             211/255.0 , 101/255.0 , 98/255.0 , 1.0 , 
  14.             215/255.0 , 54/255.0 , 45/255.0 , 1.0 , 
  15.             193/255.0 , 19/255.0 , 0 , 1.0 
  16.         } ; 
  17.         CGFloat locations[] = {0.0 , 0.5 , 1.0 } ; 
  18.         int locationNum = 3  ; 
  19.         gradient = CGGradientCreateWithColorComponents(colorSapce, components, locations, locationNum); 
  20.         return gradient ; 
  21.     } 

長(zhǎng)按Xcode左上角的Run按鈕中,在彈出的下拉列表選擇Analyze,之后工程會(huì)進(jìn)行自動(dòng)進(jìn)行build,

在成功后,在左側(cè)欄的Issue Navigation一欄中,我們可以看到Xcode靜態(tài)分析工具為我們展示的一些錯(cuò)誤提示。如下圖:


此處包含了Dead Store和Memory錯(cuò)誤提示,Dead Store提示了在方法中不會(huì)被使用的變量frame ;Memory提示了潛在內(nèi)存泄露錯(cuò)誤(gradient變量未調(diào)用CGGradientRelease函數(shù)進(jìn)行釋放)。

接著,點(diǎn)擊左側(cè)錯(cuò)誤導(dǎo)航中的提示之一,我們看到Xcode以一種圖形化的導(dǎo)向方式為我們指定錯(cuò)誤發(fā)生的流轉(zhuǎn)方式,第一次看覺(jué)得還是比較炫的。



這樣,按照靜態(tài)分析工具的錯(cuò)誤提示指引,我們可以預(yù)先發(fā)現(xiàn)那些代碼缺陷,及時(shí)進(jìn)行修復(fù),這樣代碼發(fā)生錯(cuò)誤的概率將明顯減少。

設(shè)置工程自動(dòng)進(jìn)行靜態(tài)分析

選中工程文件,在TARGETS的Build Settings選項(xiàng)中的搜索欄中搜索關(guān)鍵字,Run Static Analyzer,在結(jié)果中,Build Options下會(huì)顯示Run Static Analyzer選項(xiàng)設(shè)置,雙擊該選項(xiàng)并在彈出窗口中將NO改為YES,

那么在下次工程直接運(yùn)行時(shí)會(huì)自動(dòng)進(jìn)行代碼靜態(tài)分析,并給出錯(cuò)誤提示。

注:描述于IOS5.1下

責(zé)任編輯:閆佳明 來(lái)源: oschina
相關(guān)推薦

2021-06-08 13:56:34

工具靜態(tài)代碼

2023-02-08 18:08:16

2013-04-08 10:27:59

iOSXcode制作靜態(tài)庫(kù)

2022-06-29 09:19:09

靜態(tài)代碼C語(yǔ)言c代碼

2011-08-18 10:47:48

Xcode 4靜態(tài)庫(kù)

2022-01-19 08:00:00

靜態(tài)代碼動(dòng)態(tài)代碼開(kāi)發(fā)

2012-04-25 11:04:13

Visual Stud

2011-08-02 14:15:05

XCode 靜態(tài) 鏈接庫(kù)

2017-05-10 14:27:29

靜態(tài)代碼漏洞安全

2021-05-06 09:00:00

JavaScript靜態(tài)代碼開(kāi)發(fā)

2012-05-22 00:28:21

JavaJava開(kāi)源開(kāi)源工具

2014-08-27 16:22:19

2024-01-08 13:47:00

代碼分析工具

2020-10-08 13:44:27

漏洞

2017-08-22 13:45:27

2011-05-05 09:54:05

靜態(tài)代碼

2021-11-04 05:43:38

GoKartGo代碼靜態(tài)安全分析

2021-01-05 09:25:27

DockerSemgrep代碼靜態(tài)分析工具

2015-06-18 10:49:31

2023-09-14 22:57:52

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)