В MATLAB я не верю, что есть встроенный способ сделать это визуально, но вы можете получить необходимую информацию от профилировщика, используя FunctionTable
, возвращаемое profile('info')
.
Родительские / дочерние отношения в таблице по существу определяют ориентированный граф, с которым вы можете взаимодействовать визуально или иным образом в MATLAB, если вы преобразуете его в digraph
объект.
Например, для сопоставления выполнения программы kmeans
:
profile on
kmeans(rand(100,2),5);
p = profile('info');
t = struct2table(p.FunctionTable);
g = digraph(false(height(t)), t); % Create the graph with nodes and no edges
% Add the edges
for ii = 1:g.numnodes
for jj = 1:numel(g.Nodes.Children{ii})
g = g.addedge(ii, g.Nodes.Children{ii}(jj).Index);
end
end
plot(g,'NodeLabel',g.Nodes.FunctionName,'Layout','layered');
Производит:
plot(g,'NodeLabel',g.Nodes.FunctionName,'Layout','layered');">
Файл, из которого поступает каждая функция, также доступен через поле FileName
в FunctionTable
, поэтому, если важно различать функции и файлы, из которых они получены, вы можете использовать эту информацию, чтобы соответствующим образом раскрасить или упростить график.