當前位置:編程學習大全網 - 編程語言 - 函數調用關系圖可以提供哪些與測試有關的信息

函數調用關系圖可以提供哪些與測試有關的信息

繪制函數調用關系圖對理解大型程序大有幫助。我想大家都有過壹邊讀源碼(並在頭腦中維護壹個調用棧),壹邊在紙上畫函數調用關系,然後整理成圖的經歷。如果運氣好壹點,借助調試器的單步跟蹤功能和call stack窗口,能節約壹些腦力。

不過如果要分析的是腳本語言的代碼,那多半只好老老實實用第壹種方法了。如果在讀代碼之前,手邊就有壹份調用圖,豈不妙哉?下面舉出我知道的幾種免費的分析C/C++函數調用關系的工具。

函數調用關系圖(call graph)是圖(graph),而且是有向圖,多半還是無環圖(無圈圖)——如果代碼中沒有直接或間接的遞歸的話。Graphviz是專門繪制有向圖和無向圖的工具,所以很多call graph分析工具都以它為後端(back end)。那麽前端呢?就看各家各顯神通了。

調用圖的分析分析大致可分為“靜態”和“動態”兩種,所謂靜態分析是指在不運行待分析的程序的前提下進行分析,那麽動態分析自然就是記錄程序實際運行時的函數調用情況了。

靜態分析又有兩種方法,壹是分析源碼,二是分析編譯後的目標文件。

分析源碼獲得的調用圖的質量取決於分析工具對編程語言的理解程度,比如能不能找出正確的C++重載函數。Doxygen是源碼文檔化工具,也能繪制調用圖,它似乎是自己分析源碼獲得函數調用關系的。GNU cflow也是類似的工具,不過它似乎偏重分析流程圖(flowchart)。

對編程語言的理解程度最好的當然是編譯器了,所以有人想出給編譯器打補丁,讓它在編譯時順便記錄函數調用關系。CodeViz(其靈感來自Martin Devera (Devik) 的工具)就屬於此類,它(1.0.9版)給GCC 3.4.1打了個補丁。

另外壹個工具egypt的思路更巧妙,不用大動幹戈地給編譯器打補丁,而是讓編譯器自己dump出調用關系,然後分析分析,交給Graphviz去繪圖。不過也有人另起爐竈,自己寫個C語言編譯器(ncc),專門分析調用圖,勇氣可嘉。不如要是對C++語言也這麽幹,成本不免太高了。分析C++的調用圖,還是借助編譯器比較實在。

  • 上一篇:奧迪A6L庫存車,19款45時尚提車作業,帶著相機開始拍拍拍
  • 下一篇:深孔鉆探鉆孔彎曲及防斜技術
  • copyright 2024編程學習大全網