Understand:高效代碼靜態分析神器詳解(一)【轉】

轉自:http://www.codemx.cn/2016/04/30/Understand01/框架

 

以前用Windows系統,一直用source insight查看代碼很是方便,可是年前換到mac下面,雖然說不少東西都方便了,可是卻沒有了靜態代碼分析工具,很幸運,前段時間找到一款比source insight軟件還強大的代碼靜態分析工具,堪稱神器–Understand。這款軟件具備強大的代碼靜態分析功能,而且能夠繪製各類流程圖,不幸的是沒有發現Windows版本,只看到mac版和Linux版本,所以用Windows系統的朋友抱歉了。ide

由於工做太忙,尚未時間詳細的研究一下使用方法,只是簡單的瞭解了一下,因爲該軟件能夠幫助你快速的分析代碼結構流程,所以我提早分享給你們,但願和你們一塊兒研究,共同窗習,下面我針對這個軟件作個初步講解,後續會出詳細講解,因爲軟件是全英文的因此有問題的地方望你們指出,我會及時更正。函數

因爲安裝很簡單,在此就不說了,直接進入工程配置講解。工具

導入項目

導入項目有兩種方法,一種是從菜單欄點擊File–>New–>Project,另外一種是點擊下面界面中間的New Project學習

點擊後,會進入到以下界面,你能夠更改項目名稱爲你要導入的項目名稱,以便於之後查找,你能夠直接導入你正在開發的項目,你的代碼更改後,這個項目也會自動更新,方便你快速開發,不須要每次導入。idea

更更名稱後點擊Next進入以下界面,這個界面是讓你選擇你要導入項目包含了哪幾種語言,注意,在C/C++後面有兩種模式,下面有註釋,其中Strict模式包含Object-C和Object—C++,還有Web的註釋,本身看看就行了,在此就再也不解釋,3d

而後點擊Next進入下面界面:調試

在此界面點擊上面的「Add a Directory」,也就是添加你要導入項目的路徑,點擊後會彈出以下界面,此時有個奇葩就是彈出的界面會被上圖界面遮擋,此時你要移開該界面,而後會出現下面界面:code

點擊後面的帶有三個點的按鈕選擇你要加入的項目文件夾,此處不用打開文件夾,只要點中文件夾點擊open按鈕:blog

此時只須要點擊OK便可,界面會跳轉到以下界面:

此時有兩個選項,一個是當即分析代碼,一個選擇配置,對於咱們來講只須要默認便可,而後點擊OK按鈕,此時軟件開始分析代碼,分析完成後會出現以下界面:

左側會出你的項目結構,中間出現你項目的名稱,此時你能夠操做左面項目來查看相關代碼,以下圖所示:

這麼多類和方法如何快速定位,那確定是搜索,該軟件針對不一樣位置,不一樣屬性有不一樣的搜索方法,下面介紹搜索功能。

搜索功能

1.左側項目結構中搜索:在這個搜索中你能夠快速搜索你要查看的類,快捷鍵,鼠標點擊左側上面項目結構窗口,而後按command + F鍵會出現以下圖所示的搜索框,在框中輸入你想要的類回車便可

2.類中方法搜索:將鼠標定位到右側代碼中,點擊command + F,會彈出搜索框,輸入方法回車便可:

3.在文件中搜索:也就是全局搜索,快捷鍵F5或者去上面菜單欄中的search欄中查找,輸入你想要的類或者方法,回車查找,下面會列出全部使用的地方:

4.實體類查找:軟件菜單欄search中最後一項–Find Entity,點擊輸入你要查找的實體類,回車查找:

快速搜索是軟件快速使用必備的技能,包括咱們經常使用的idea同樣,快速定位類,方法,常量等,能夠快速幫助咱們解決問題。

上面我介紹改軟件時提到能夠繪製流程圖等功能,下面就針對這個功能介紹一些一些圖形的繪製功能,幫助你快速分析代碼。

項目視圖

項目視圖包含不少的功能,可以自動生成各類流程圖結構圖,幫助你快速理清代碼邏輯、結構等,以便快速理解項目流程,快速開發,視圖查看方式有兩種,一種是鼠標點擊你要查看的類或者方法等上面,而後右鍵彈出菜單,鼠標移動到Graphical Views,而後彈出二級菜單,以下圖所示:

另外一種方式是點擊要查看的類或者方法,而後找到代碼上面菜單欄中的以下圖標:

而後點擊圖標右下角的下拉箭頭,彈出以下菜單,便可選擇查看相關視圖:

層級關係視圖分類:

1.Butterfly:若是兩個實體間存在關係,就顯示這兩個實體間的調用和被調用關係;以下圖爲Activity中的一個方法的關係圖:

2.Calls:展現從你選擇的這個方法開始的整個調用鏈條;

3.Called By:展現了這個實體被哪些代碼調用,這個結構圖是從底部向上看或者從右到左看;

4.Calls Relationship/Calledby Relationship:展現了兩個實體之間的調用和被調用關係,操做方法:首先右鍵你要選擇的第一個實體,而後點擊另外一個你要選擇的實體,若是選擇錯誤,能夠再次點擊其餘正確便可,而後點擊ok;

5.Contains:展現一個實體中的層級圖,也能夠是一個文件,一條鏈接線讀做」x includes y「;

6.Extended By:展現這個類被哪些類所繼承,

7.Extends:展現這個類繼承自那個類:

結構關係視圖分類:

1.Graph Architecture:展現一個框架節點的結構關係;

2.Declaration:展現一個實體的結構關係,例如:展現參數,則返回類型和被調用函數,對於類,則展現私有成員變量(誰繼承這個類,誰基於這個類)

3.Parent Declaration:展現這個實體在哪裏被聲明瞭的結構關係;

4.Declaration File:展現所選的文件中全部被定義的實體(例如函數,類型,變量,常量等);

5.Declaration Type:展現組成類型;

6.Class Declaration:展現定義類和父類的成員變量;

7.Data Members:展現類或者方法的組成,或者包含的類型;

8.Control Flow:展現一個實體的控制流程圖或者相似實體類型;

9.Cluster Control Flow:展現一個實體的流程圖或者相似實體類型,這個比上一個更具備交互性;

10.UML Class Diagram:展現這個項目中或者一個文件中定義的類以及與這個類關聯的類

11.UML Sequence Diagram:展現兩個實體之間的時序關係圖;

12.Package:展現給定包名中聲明的全部實體

13.Task:展現一個任務中的參數,調用,實體

14.Rename Declaration:展現實體中被重命名的全部實體

因爲視圖比較多,因此就一一貼上代碼,主要仍是須要本身去調試,查看各個功能視圖的展現結構以及做用,孰能生巧,多操做幾下就會了,因此再也不作過多的解釋。最終但願這款軟件可以幫助你快速開發,快速閱讀別人的或者本身的代碼。

相關文章
相關標籤/搜索