2011-09-14 97 views
12

我正在嘗試爲500個左右的matlab src文件創建函數調用圖。我無法找到任何可以幫助我爲多個src文件執行相同操作的工具。從matlab src代碼生成調用圖

是否有人熟悉任何工具或插件?

在任何情況下,這些工具都無法使用,在閱讀什麼建議6000行的MATLAB代碼 沒有證件是值得歡迎的。

回答

11

讓我提出M2HTML,工具自動生成您的MATLAB M文件的HTML文檔。在它的特徵列表:

  • 功能之間查找依賴關係,並生成依賴圖(使用的GraphViz的點工具)的功能和子功能
  • 自動交叉引用與它們在源代碼
定義

查看該demo頁面查看該工具輸出的示例。

+0

的從MDOT摹幫助舉例來說: mdot('m2html.mat','m2html.dot'); !dot -Tps m2html.dot -o m2html.ps !neato -Tps m2html.dot -o m2html.ps –

5

我認爲你的意思是你想看看你的代碼是如何運行的 - 哪些函數調用哪些子函數,何時運行以及運行多長時間?

看一看MATLAB Code Profiler。執行代碼如下:

>> profile on -history; MyCode; profile viewer 
>> p = profile('info'); 

p包含函數歷史,從同一個幫助頁面我上面鏈接:

歷史數據描述的輸入功能的順序和執行過程中退出。 profile命令返回其返回結構的FunctionHistory字段中的歷史數據。歷史數據是一個2乘n的數組。第一行包含布爾值,其中0表示進入函數,而1表示退出函數。第二行標識FunctionTable字段中由其索引輸入或退出的功能。這個例子[下面]讀取歷史數據並將其顯示在MATLAB命令窗口中。

profile on -history 
plot(magic(4)); 
p = profile('info'); 

for n = 1:size(p.FunctionHistory,2) 
if p.FunctionHistory(1,n)==0 
     str = 'entering function: '; 
else 
     str = 'exiting function: '; 
end 
disp([str p.FunctionTable(p.FunctionHistory(2,n)).FunctionName]) 
end 

你不一定需要顯示的入口和出口要求像上面的例子;只要看看p.FunctionTablep.FunctionHistory就足以顯示代碼進入和退出功能。

9

我建議看看使用depfun函數來構造調用圖。有關更多信息,請參閱http://www.mathworks.com/help/techdoc/ref/depfun.html

尤其是,我發現用'-toponly'參數調用depfun,然後遍歷結果,這是一種手工構建調用圖的絕佳方法。不幸的是,我不再能夠訪問我用這個編寫的任何代碼。

0

我與m2html答案達成一致,我只是想說,以下從m2html/MDOT文檔的例子是好的:

mdot('m2html.mat','m2html.dot'); 
!dot -Tps m2html.dot -o m2html.ps 
!neato -Tps m2html.dot -o m2html.ps 

但我有更好的運氣與導出爲PDF:

mdot('m2html.mat','m2html.dot'); 
!dot -Tpdf m2html.dot -o m2html.pdf 

而且,你嘗試了上面的命令之前,你必須發出類似如下:

m2html('mfiles','..\some\dir\with\code\','htmldir','doc_dir','graph','on')