摘要:借助,自動提取代碼的動態調用流程圖。繪制類圖安裝是一個開源圖形可視化軟件。循環曲線表示遞歸過程調用。繪制的常用工具有靜態調用圖等。包括模塊之間的調用流程函數調用次數及耗時等。
在設計軟件、分析代碼時,我們常常會借助UML以及函數調用圖,來幫自己梳理思路。
尤其是遇到bug時,借助這些可視化手段,也可以幫你在調試過程中發現邏輯錯誤。
本文主要介紹以下兩個方法:
借助graphviz+pyreverse,自動提取python代碼的UML類圖和包依賴關系。
借助graphviz+pycallgraph,自動提取python代碼的動態調用流程圖。
Graphviz 是一個開源圖形可視化軟件。
Graphviz 以簡單的文本語言對圖形進行描述,并以多種有用的格式制作圖表,例如用于網頁的圖像和 SVG,用于包含在 PDF 或其他文檔中的 Postscript;或顯示在交互式圖形瀏覽器中。
步驟①:從官網下載graphviz軟件
官網下載:http://www.graphviz.org/download/
下載exe安裝包,完成graphviz軟件安裝,并找到bin路徑。
步驟②:設置環境變量
步驟③:安裝對應python庫
$ conda install python-graphviz
pyreverse是一組用于對 Python 代碼進行逆向工程的實用程序。
可以分析Python代碼并提取 UML 類圖和包依賴關系1:
Pyreverse 現在已集成到 pylint 中:http://pypi.python.org/pypi/pylint/
安裝pylint:
$ pip install pylint
注意:pip install pyreverse時,會發現已經找不到這個庫了:ERROR: Could not find a version that satisfies the requirement pyreverse
,不過pylint中已經包含了pyreverse,所以直接安裝pylint即可。
UML類圖常用于面向對象的建模中,UML類圖的每個方框是一個對象類,每個框從上到下分為三部分,第一部分是對象類名稱,第二部分是類的屬性,第三部分是類的函數。
在命令行輸入語句,生成package的UML圖:
$ pyreverse -o png -p Pyreverse pylint/pyreverse/[...]creating diagram packages_Pyreverse.pngcreating diagram classes_Pyreverse.png
函數調用圖(Call Graph)是一個控制流程圖,用于表示程序中各個單元之間的調用關系。每個節點之間的邊緣表示調用過程。循環曲線表示遞歸過程調用。2
繪制Call Graph的常用工具有:pycallgraph、pyan(靜態調用圖)、gprof2dot 、code2flow等。本文主要介紹pycallgraph的用法。
pycallgraph是一個python模塊,可以對python代碼進行動態調用圖分析3。包括模塊之間的調用流程、函數調用次數及耗時等。
同2.1節。
步驟①:從官網下載graphviz軟件
官網下載:http://www.graphviz.org/download/
下載exe安裝包,完成graphviz軟件安裝,并找到bin路徑。
步驟②:設置環境變量
步驟③:安裝對應python庫
$ pip install graphviz
安裝pycallgraph:
$ pip install pycallgraph
$ pycallgraph graphviz -- ./mypythonscript.py
最簡單的例子,直接在要分析的函數調用前,加上with PyCallGraph(output=GraphvizOutput()):
:
from pycallgraph import PyCallGraphfrom pycallgraph.output import GraphvizOutputwith PyCallGraph(output=GraphvizOutput()): # 調用你要分析的函數 code_to_profile()
如果需要指定調用圖中包含(include)哪些函數、排除(exclude)哪些函數,就要用到GlobbingFilter(include=[....])
、GlobbingFilter(exclude=[....])
,例如這樣4:
from pycallgraph import PyCallGraphfrom pycallgraph.output import GraphvizOutputfrom pycallgraph import Configfrom pycallgraph import GlobbingFilterdef main(): # TODO: 調用各種類、函數 return if __name__ == "__main__": config = Config() # 調用圖中包括(include)哪些函數 # 用moduleName.*表示,包含某個模塊內的所有函數 config.trace_filter = GlobbingFilter(include=[ "main", "app.*", "widgets.list_widget.*", "utils.RegionInfo.*" ]) # 調用圖中不包括(exclude)哪些函數 # config.trace_filter = GlobbingFilter(exclude=[ # "moduleA.*", # "moduleB.*", # "*.funcB" # ]) graphviz = GraphvizOutput() graphviz.output_file = "graph.png" with PyCallGraph(output=graphviz, config=config): main()
在程序正常運行完之后,就會在當前路徑生成graph.png文件。
越是復雜的程序,生成的調用圖就會越大,注意選取你最關注的函數進行可視化。
其他高級用法可以參考:
官方文檔:https://pycallgraph.readthedocs.io/en/master/
本文介紹了兩個python代碼可視化工具:
借助graphviz+pyreverse,可以自動提取python代碼的UML類圖。
借助graphviz+pycallgraph,可以自動提取python代碼的動態調用圖。
如果對你有幫助的話,歡迎一鍵三連支持下博主。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/122568.html
摘要:聯合查找算法是并查集數據結構一種應用。并查集是一種樹型的數據結構,其保持著用于處理一些不相交集合的合并及查詢問題。的特征是刪除節點。目前就職于騰訊事業部,從事神經機器翻譯工作。 5. TF - Graph模塊TF把神經網絡模型表達成一張拓撲結構的Graph,Graph中的一個節點表示一種計算算子。Graph從輸入到輸出的Tensor數據流動完成了一個運算過程,這是對類似概率圖、神經網絡等連接...
摘要:本文依據對簡稱白皮書和官方教程的理解,從系統和代碼實現角度講解的內部實現原理。這一點是和包括在內的符號編程框架較大的不同。的做法是引入了來處理。這樣就幾乎讓本身成為一門獨立的語言。當為是,執行操作當為時,執行操作。支持的控制算子有和等。 摘要2015年11月9日,Google發布深度學習框架TensorFlow并宣布開源,并迅速得到廣泛關注,在圖形分類、音頻處理、推薦系統和自然語言處理等場景...
摘要:相對于靜態圖表,人類總是容易被動畫和交互式圖表所吸引。可以使用輕松生成圖表直方圖功率譜,條形圖,錯誤圖表,散點圖等。然而,也有一些方面落后于同類的庫。動畫使用一組固定的對象。稍后將用數據對行對象進行填充。現在用將它們轉換為動畫。 翻譯:瘋狂的技術宅https://towardsdatascience.co... showImg(https://segmentfault.com/img...
摘要:相對于靜態圖表,人類總是容易被動畫和交互式圖表所吸引。可以使用輕松生成圖表直方圖功率譜,條形圖,錯誤圖表,散點圖等。然而,也有一些方面落后于同類的庫。動畫使用一組固定的對象。稍后將用數據對行對象進行填充。現在用將它們轉換為動畫。 翻譯:瘋狂的技術宅https://towardsdatascience.co... showImg(https://segmentfault.com/img...
摘要:前言之前受知乎用戶啟發,寫了個源碼的調用圖生成器,可以以圖示法顯示函數的調用關系,代碼放在了倉庫里,僅供參考主要思路利用的的注入選項,得到每個函數的調用地址信息,生成一個文件,然后利用和將函數名及其所在源碼位置從地址中解析出來,從而得到 前言 之前受知乎用戶mailto1587啟發,寫了個C++源碼的調用圖生成器,可以以圖示法顯示C++函數的調用關系,代碼放在了github倉庫里,僅供...
閱讀 3629·2021-11-24 09:39
閱讀 2569·2021-11-15 11:37
閱讀 2224·2021-11-11 16:55
閱讀 5260·2021-10-14 09:43
閱讀 3717·2021-10-08 10:05
閱讀 3020·2021-09-13 10:26
閱讀 2339·2021-09-08 09:35
閱讀 3549·2019-08-30 15:55