我一直在讀別人的matlab
的代碼,我不知道代碼的結構如何。我的意思是我想知道函數的層次結構,哪個函數使用哪個函數。我正在閱讀代碼來弄清楚,但它花了很多時間。MatLab中函數的層次結構
那麼還有什麼其他方式可以在沒有閱讀整個事物的情況下看到這個層次結構嗎?說實話,它開始變得混亂。也許MatLab
有一個內置的功能!我發現這一點:
How can I generate a list of function dependencies in MATLAB?
,但這似乎並沒有對大家有所幫助!
我一直在讀別人的matlab
的代碼,我不知道代碼的結構如何。我的意思是我想知道函數的層次結構,哪個函數使用哪個函數。我正在閱讀代碼來弄清楚,但它花了很多時間。MatLab中函數的層次結構
那麼還有什麼其他方式可以在沒有閱讀整個事物的情況下看到這個層次結構嗎?說實話,它開始變得混亂。也許MatLab
有一個內置的功能!我發現這一點:
How can I generate a list of function dependencies in MATLAB?
,但這似乎並沒有對大家有所幫助!
不知道有關顯示可見或依賴函數的函數。但基本規則如下:
1)只有.m文件中的第一個函數(通常必須與文件本身具有相同的名稱)在該文件外部可見。
2)如果文件位於matlab路徑中,任何函數都可以看到任何頂層函數(見1)。 Matlab可以顯示你的路徑,所以你知道它在哪裏搜索。
3)路徑的順序很重要,路徑中找到的函數foo的第一個實例將被調用。顯然,當前目錄位於路徑的頂部。
3)給定文件中的所有函數都可以看到該文件中的所有其他函數。
這就是基礎知識。毫無疑問,還有其他規則,可能還有例外。但是這種理解對我來說很好。
很明顯,找出哪個函數被調用的最簡單的方法是在編輯器中點擊它並打開它。
我所做的一件事就是簡單地在每個函數的開頭fprintf("inside function <name>/n");
和函數的結尾fprintf("leaving function <name>/n");
其中<name>
是函數的名稱。
這將給你一個非常具體的列表,哪個函數被哪個函數調用(根據它們出現的順序)。另外一個例子是放置fprintf("function <name1> calling function <name2>/n");
,這樣你可以更清楚地知道哪個函數被哪個函數調用。
MATLAB profiler將顯示您的代碼調用哪些函數(以及更多的啓動信息),並允許您單擊函數調用的層次結構。您可以撥打profile on
然後運行您的代碼,然後撥打profile off
和profile viewer
,或者您可以簡單地撥打profile viewer
並輸入一行代碼在頂部的編輯框中運行。
使用MATLAB中提供的相關性報告: http://www.mathworks.co.uk/help/matlab/matlab_prog/identify-dependencies.html
也有對文件交換一些工具,如fdep。