原始碼閱讀工具-understand
相對於大家熟知的source insight 原始碼閱讀工具,understand工具似乎差了不少。
但是,兩者的優缺點很顯而易見,
source insight 優缺點(撿重點說):
- 很好的“即點即現”功能,滑鼠所到就可以看到相關內容的定義/宣告;
- 不能夠很好的維護/支援 函式的呼叫層級關係;
相對的 understand原始碼閱讀工具,不支援“即點即現”功能,但卻很漂亮的維護/支援了 函式的層級呼叫關係。
如果你有這方面的需求,建議嘗試用用understand工具,它能夠更好地為你理清楚函式的呼叫層級關係。
以下,understand的功能解釋/使用。
層級關係圖:
如下程式碼示例:
void root(void)
{
//平臺初始化
Init_Flats();
//建立系統任務
ShowInitInfo("建立系統任務2...");
CreateSysTask2();
//載入主維護口
ShowInitInfo( "載入維護埠..." );
InitSysPort();
//初始化負控系統
ShowInitInfo("建立/掃描系統檔案...");
if(!bInSafe)
InitFKSystem();
if(bInSafe)
{
Trace("安全模式");
}
ExInitShowInitInfo();
//退出ROOT任務
}
butterfly:
顯示呼叫和被呼叫關係,如果存在。選定的實體用紅色標識,如圖:
可知,選定的為root函式,VC_Entry函式呼叫多級…最終呼叫了root函式;root函式呼叫了包括ShowInitInfo函式等等,以及更深層次的呼叫。
Calls:
顯示從此函式發出的整個呼叫鏈。 實體之間的每條線被讀作“x呼叫y”。
可知,root函式中呼叫的如圖所示的函式。
Called By:
顯示誰直接呼叫了該函式。
Calls Relationship / Calledby Relationship:
顯示兩個函式之間的呼叫以及被呼叫關係。
Calls Relationship:
root 呼叫ShowInitInfo
Calledby Relationship:
ShowInitInfo 呼叫root:
Control Flow
函式實體的流程圖:不完美,但很清晰。
Declaration:
顯示函式實體的結構,包括:函式名,函式返回值、函式實體被呼叫函式、函式實體呼叫了的函式;
Declaration File
對選中函式的定義檔案的描述,包括該檔案包含的標頭檔案、變數、檔案包含的函式等
gdwLastSaveTime為檔案定義的變數,
UML Sequence Diagram:
生成UML的時序圖,具體的請另行檢視,不做過多解釋。
Cluster graphs:聚類圖
包括:Cluster Call, Cluster Callby, Cluster Call Butterfly, Cluster Call Internal, and Cluster Control Flow等,與上述的其他圖類似,但更全面,有大局觀。這裡不一一列舉。
相關文章
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- ReactorKit原始碼閱讀React原始碼
- Vollery原始碼閱讀(—)原始碼
- NGINX原始碼閱讀Nginx原始碼
- ThreadLocal原始碼閱讀thread原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- Runtime 原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- AmplifyImpostors原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- fuzz原始碼閱讀原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- AQS原始碼閱讀AQS原始碼
- Mux 原始碼閱讀UX原始碼
- ConcurrentHashMap原始碼閱讀HashMap原始碼
- HashMap原始碼閱讀HashMap原始碼
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- JDK原始碼閱讀:String類閱讀筆記JDK原始碼筆記
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 使用OpenGrok閱讀原始碼原始碼
- express 原始碼閱讀(全)Express原始碼
- Kingfisher原始碼閱讀(一)原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- ArrayList原始碼閱讀(增)原始碼
- snabbdom 原始碼閱讀分析原始碼
- Appdash原始碼閱讀——reflectAPP原始碼
- React原始碼閱讀:setStateReact原始碼
- 如何快速閱讀原始碼原始碼
- koa原始碼閱讀[0]原始碼
- basictracer原始碼閱讀——TracerImpl原始碼