14

約 500 個の matlab src ファイルの関数呼び出しグラフを作成しようとしています。複数の src ファイルに対して同じことを行うのに役立つツールが見つかりません。

ツールやプラグインに詳しい人はいますか?

そのようなツールが利用できない場合は、ドキュメントなしで 6000 行の matlab コードを読むことについての提案を歓迎します。

4

5 に答える 5

11

MATLABmファイルのHTMLドキュメントを自動的に生成するツールであるM2HTMLを提案します。その機能リストの中で:

  • 関数間の依存関係を検索し、依存関係グラフを生成します(GraphVizのドットツールを使用)
  • 関数とサブ関数とソースコードでの定義との自動相互参照

このツールの出力例については、このデモページをご覧ください。

于 2011-09-16T12:26:32.823 に答える
9

depfun関数を使用してコール グラフを作成することを検討することをお勧めします。詳細については、 http://www.mathworks.com/help/techdoc/ref/depfun.htmlを参照してください。

特に、引数を指定depfunして呼び出し'-toponly'、結果を反復処理することは、コール グラフを手動で構築する優れた方法であることがわかりました。残念ながら、これを使用して記述したコードにはアクセスできなくなりました。

于 2011-09-15T04:40:40.793 に答える
5

コードがどのように実行されているかを正確に確認したいという意味だと思います。どの関数がどのサブ関数をいつ、どのくらいの時間実行するのでしょうか。

MATLABコードプロファイラーを見てください。次のようにコードを実行します。

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

p機能履歴が含まれています。上記でリンクした同じヘルプページから:

履歴データは、実行中に出入りする関数のシーケンスを記述します。このコマンドは、返す構造体profileのフィールドに履歴データを返します。FunctionHistory履歴データは2行n列の配列です。最初の行にはブール値が含まれています。ここで、0は関数への入り口を意味し、関数1からの出口を意味します。2番目の行は、フィールドのインデックスによって入力または終了される関数を識別し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コードが関数に出入りするタイミングを示すのに十分です。

于 2011-09-14T19:09:48.287 に答える
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')
于 2016-06-09T18:18:11.700 に答える