原始碼閱讀工具-understand

點滴寫錄發表於2018-05-11

相對於大家熟知的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等,與上述的其他圖類似,但更全面,有大局觀。這裡不一一列舉。

相關文章