姓名:姜思維? ? ? ? ?學(xué)號:19020100333? ? ? ? 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:https://blog.csdn.net/weixin_41213648/article/details/87897309?spm=1001.2014.3001.5501
【嵌牛導(dǎo)讀】研究understand軟件使用教程
【嵌牛鼻子】understand軟件使用教程
【嵌牛提問】研究understand軟件使用教程?
【嵌牛正文】
源代碼閱讀工具(Scientific Toolworks Understand)的特色
1、支持多語言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合語言的project也支持
2、多平臺: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X
3、代碼語法高亮、代碼折迭、交叉跳轉(zhuǎn)、書簽等基本閱讀功能。
4、可以對整個project的architecture、metrics進(jìn)行分析并輸出報(bào)表。
5、可以對代碼生成多種圖(butterfly graph、call graph、called by graph、control flow graph、UML class graph等),在圖上點(diǎn)擊節(jié)點(diǎn)可以跳轉(zhuǎn)到對應(yīng)的源代碼位置。
6、提供Perl API便于擴(kuò)展。作圖全部是用Perl插件實(shí)現(xiàn)的,直接讀取分析好的數(shù)據(jù)庫作圖。
7、內(nèi)置的目錄和文件比較器。
8、支持project的snapshot,并能和自家的TrackBack集成便于監(jiān)視project的變化。
軟件說明
功能比sourceinsight多些(比如enum的值的顯示),而且#ifdef包含的比較多嵌套,sourceinsight如果太多嵌套,有bug. 流程圖之類也比sourceinsight完整.sourceinsight的顯示明顯好多了,而且體積比較小,編輯速度快,可能是用熟的關(guān)系,還是sourceinsight比較順手.
可惜sourceinsight太長時(shí)間沒有更新了. 現(xiàn)在我一般用sourceinsight,需要看某些SI沒有的用understand.另外好像兩個軟件都不太支持#if (defined(MACRO) || defined(MACRO1))這樣的解析.
導(dǎo)入項(xiàng)目有兩種方法,一種是從菜單欄點(diǎn)擊File–>New–>Project,另一種是點(diǎn)擊下面界面中間的New Project
點(diǎn)擊后,會進(jìn)入到如下界面,你可以更改項(xiàng)目名稱為你要導(dǎo)入的項(xiàng)目名稱,以便于以后查找,你可以直接導(dǎo)入你正在開發(fā)的項(xiàng)目,你的代碼更改后,這個項(xiàng)目也會自動更新,方便你快速開發(fā),不需要每次導(dǎo)入。
更改名稱后點(diǎn)擊Next進(jìn)入如下界面,這個界面是讓你選擇你要導(dǎo)入項(xiàng)目包含了哪幾種語言,注意,在C/C++后面有兩種模式,下面有注釋,其中Strict模式包含Object-C和Object—C++,還有Web的注釋,自己看看就好了,在此就不再解釋,
然后點(diǎn)擊Next進(jìn)入下面界面:
在此界面點(diǎn)擊上面的“Add a Directory”,也就是添加你要導(dǎo)入項(xiàng)目的路徑,點(diǎn)擊后會彈出如下界面,此時(shí)有個奇葩就是彈出的界面會被上圖界面遮擋,此時(shí)你要移開該界面,然后會出現(xiàn)下面界面:
點(diǎn)擊后面的帶有三個點(diǎn)的按鈕選擇你要加入的項(xiàng)目文件夾,此處不用打開文件夾,只要點(diǎn)中文件夾點(diǎn)擊open按鈕:
此時(shí)只需要點(diǎn)擊OK即可,界面會跳轉(zhuǎn)到如下界面:
此時(shí)有兩個選項(xiàng),一個是立即分析代碼,一個選擇配置,對于我們來說只需要默認(rèn)即可,然后點(diǎn)擊OK按鈕,此時(shí)軟件開始分析代碼,分析完成后會出現(xiàn)如下界面:
左側(cè)會出你的項(xiàng)目結(jié)構(gòu),中間出現(xiàn)你項(xiàng)目的名稱,此時(shí)你可以操作左面項(xiàng)目來查看相關(guān)代碼,如下圖所示:
這么多類和方法如何快速定位,那肯定是搜索,該軟件針對不同位置,不同屬性有不同的搜索方法,下面介紹搜索功能。
1.左側(cè)項(xiàng)目結(jié)構(gòu)中搜索:在這個搜索中你可以快速搜索你要查看的類,快捷鍵,鼠標(biāo)點(diǎn)擊左側(cè)上面項(xiàng)目結(jié)構(gòu)窗口,然后按command + F鍵會出現(xiàn)如下圖所示的搜索框,在框中輸入你想要的類回車即可
2.類中方法搜索:將鼠標(biāo)定位到右側(cè)代碼中,點(diǎn)擊command + F,會彈出搜索框,輸入方法回車即可:
3.在文件中搜索:也就是全局搜索,快捷鍵F5或者去上面菜單欄中的search欄中查找,輸入你想要的類或者方法,回車查找,下面會列出所有使用的地方:
4.實(shí)體類查找:軟件菜單欄search中最后一項(xiàng)–Find Entity,點(diǎn)擊輸入你要查找的實(shí)體類,回車查找:
快速搜索是軟件快速使用必備的技能,包括我們常用的idea一樣,快速定位類,方法,常量等,可以快速幫助我們解決問題。
上面我介紹改軟件時(shí)提到可以繪制流程圖等功能,下面就針對這個功能介紹一些一些圖形的繪制功能,幫助你快速分析代碼。
項(xiàng)目視圖包含很多的功能,能夠自動生成各種流程圖結(jié)構(gòu)圖,幫助你快速理清代碼邏輯、結(jié)構(gòu)等,以便快速理解項(xiàng)目流程,快速開發(fā),視圖查看方式有兩種,一種是鼠標(biāo)點(diǎn)擊你要查看的類或者方法等上面,然后右鍵彈出菜單,鼠標(biāo)移動到Graphical Views,然后彈出二級菜單,如下圖所示:
另一種方式是點(diǎn)擊要查看的類或者方法,然后找到代碼上面菜單欄中的如下圖標(biāo):
然后點(diǎn)擊圖標(biāo)右下角的下拉箭頭,彈出如下菜單,即可選擇查看相關(guān)視圖:
1.Butterfly:如果兩個實(shí)體間存在關(guān)系,就顯示這兩個實(shí)體間的調(diào)用和被調(diào)用關(guān)系;如下圖為Activity中的一個方法的關(guān)系圖:
2.Calls:展示從你選擇的這個方法開始的整個調(diào)用鏈條;
3.Called By:展示了這個實(shí)體被哪些代碼調(diào)用,這個結(jié)構(gòu)圖是從底部向上看或者從右到左看;
4.Calls Relationship/Calledby Relationship:展示了兩個實(shí)體之間的調(diào)用和被調(diào)用關(guān)系,操作方法:首先右鍵你要選擇的第一個實(shí)體,然后點(diǎn)擊另一個你要選擇的實(shí)體,如果選擇錯誤,可以再次點(diǎn)擊其他正確即可,然后點(diǎn)擊ok;
5.Contains:展示一個實(shí)體中的層級圖,也可以是一個文件,一條連接線讀作”x includes y“;
6.Extended By:展示這個類被哪些類所繼承,
7.Extends:展示這個類繼承自那個類:
1.Graph Architecture:展示一個框架節(jié)點(diǎn)的結(jié)構(gòu)關(guān)系;
2.Declaration:展示一個實(shí)體的結(jié)構(gòu)關(guān)系,例如:展示參數(shù),則返回類型和被調(diào)用函數(shù),對于類,則展示私有成員變量(誰繼承這個類,誰基于這個類)
3.Parent Declaration:展示這個實(shí)體在哪里被聲明了的結(jié)構(gòu)關(guān)系;
4.Declaration File:展示所選的文件中所有被定義的實(shí)體(例如函數(shù),類型,變量,常量等);
5.Declaration Type:展示組成類型;
6.Class Declaration:展示定義類和父類的成員變量;
7.Data Members:展示類或者方法的組成,或者包含的類型;
8.Control Flow:展示一個實(shí)體的控制流程圖或者類似實(shí)體類型;
9.Cluster Control Flow:展示一個實(shí)體的流程圖或者類似實(shí)體類型,這個比上一個更具有交互性;
10.UML Class Diagram:展示這個項(xiàng)目中或者一個文件中定義的類以及與這個類關(guān)聯(lián)的類
11.UML Sequence Diagram:展示兩個實(shí)體之間的時(shí)序關(guān)系圖;
12.Package:展示給定包名中聲明的所有實(shí)體
13.Task:展示一個任務(wù)中的參數(shù),調(diào)用,實(shí)體
14.Rename Declaration:展示實(shí)體中被重命名的所有實(shí)體
由于視圖比較多,所以就一一貼上代碼,主要還是需要自己去調(diào)試,查看各個功能視圖的展示結(jié)構(gòu)以及作用,孰能生巧,多操作幾下就會了,所以不再做過多的解釋。最終希望這款軟件能夠幫助你快速開發(fā),快速閱讀別人的或者自己的代碼。
Architecture 層級:
An architecture is a hierarchical aggregation of source code units (entities). An architecture can be user created or automatically generated. Architectures need not be complete (that is, an architecture’s flattened expansion need not reference every source entity in the database), nor unique (that is, an architecture’s flattened expansion need not maintain the set property).
層級表示代碼單元(或者實(shí)體)組成的層次結(jié)構(gòu),可以由用戶手動創(chuàng)建,也可由本
軟件自動生成。一個層級可以不完整(例如一個層級的扁平化擴(kuò)展有可能不會關(guān)聯(lián)數(shù)據(jù)庫中的所
有代碼實(shí)體),也可能不唯一(扁平化擴(kuò)展的層級可能不會處理其預(yù)設(shè)屬性)。
Database 數(shù)據(jù)庫
The database is where the results of the source code analysis, as well as project settings, are stored. By default, this is a project’s “.udb” file.
代碼經(jīng)分析后產(chǎn)生的中間結(jié)果,以及工程設(shè)置保存在數(shù)據(jù)庫,其缺省擴(kuò)展名為“.udb”。
Entity 實(shí)體
An Understand “entity” is anything it has information about. In practice this means anything declared or used in your source code and the files that contain the project. Subroutines, variables, and source files are all examples of entities.
Understand 描述的“實(shí)體”表示任何包含信息的事物,具體來說,代碼中聲明或
者使用的標(biāo)識、包含工程的文件、子程序、變量、源文件都可以被稱為實(shí)體。
Project 工程
The set of source code you have analyzed and the settings and parameters chosen. A “project file” contains the list of source files and the project settings.
表示源代碼的集合以及相關(guān)的配置和參數(shù),工程文件包含源文件清單和工程設(shè)置。
Relationship 關(guān)聯(lián)
A particular way that entities relate to one another. The names of relationships come from the syntax and semantics of a programming language. For instance, subroutine entities can have “Call” relationships and “CalledBy” relationships.
互作用的實(shí)體之間的關(guān)系,關(guān)聯(lián)的名稱來源于編程語言的語法和語義,例如過程式實(shí)體具有“調(diào)用”和“被調(diào)用”的關(guān)聯(lián)對象。
Script 腳本
Generally a Perl script. These can be run from within Understand’s GUI, or externally via the “uperl” command. The Understand Perl API provides easy and direct access to all information stored in an Understand database.
通常指perl腳本,腳本可以通過Understand 2.5的圖形用戶界面或者外部的腳本命令執(zhí)行。Understand Perl API提供了快捷的訪問Understand數(shù)據(jù)庫所有信息的接口。
————————————————
版權(quán)聲明:本文為CSDN博主「JiandaoStudio」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_41213648/article/details/87897309?spm=1001.2014.3001.5501