2011-09-14 16 views
12

Tôi đang cố tạo biểu đồ cuộc gọi hàm cho khoảng 500 tệp src MATLAB. Tôi không thể tìm thấy bất kỳ công cụ nào có thể giúp tôi thực hiện tương tự cho nhiều tệp src.Tạo biểu đồ cuộc gọi từ mã src MATLAB

Có ai quen thuộc với bất kỳ công cụ hoặc plugin nào không?

Trong trường hợp không có công cụ như vậy, bất kỳ đề xuất nào về việc đọc 6000 dòng mã MATLAB mà không có tài liệu được chào đón.

Trả lời

11

Hãy để tôi đề xuất M2HTML, một công cụ để tự động tạo tài liệu HTML của các tệp m MATLAB của bạn. Trong số danh sách tính năng của nó:

  • Finds phụ thuộc giữa các chức năng và tạo ra một biểu đồ phụ thuộc (sử dụng dấu chấm công cụ của GraphViz)
  • Automatic tham khảo chéo chức năng, subfunctions với định nghĩa của họ trong mã nguồn

Kiểm tra trang demo này để xem ví dụ về đầu ra của công cụ này.

+0

sự giúp đỡ từ Mdot g ives ví dụ này: mdot ('m2html.mat', 'm2html.dot'); ! Dot -Tps m2html.dot -o m2html.ps ! Neato -Tps m2html.dot -o m2html.ps –

5

Tôi lấy nó bạn có nghĩa là bạn muốn xem chính xác mã của bạn đang chạy như thế nào - hàm nào gọi hàm phụ nào, khi nào và các hàm đó chạy như thế nào?

Hãy xem qua số MATLAB Code Profiler. Thực thi mã của bạn như sau:

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

p chứa lịch sử chức năng, Từ đó trang trợ giúp cùng tôi liên kết ở trên:

Các dữ liệu lịch sử mô tả các chuỗi các chức năng nhập và thoát trong quá trình thực. Lệnh profile trả về dữ liệu lịch sử trong trường FunctionHistory của cấu trúc mà nó trả về. Dữ liệu lịch sử là một mảng 2-by-n. Hàng đầu tiên chứa các giá trị Boolean, trong đó 0 nghĩa là lối vào một hàm và 1 có nghĩa là thoát khỏi một hàm. Hàng thứ hai xác định hàm được nhập hoặc thoát bởi chỉ mục của nó trong trường FunctionTable. Ví dụ này [bên dưới] đọc dữ liệu lịch sử và hiển thị nó trong cửa sổ lệnh 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 

Bạn không nhất thiết cần phải hiển thị các lối vào và lối ra gọi như ví dụ ở trên; chỉ cần xem p.FunctionTablep.FunctionHistory sẽ đủ để hiển thị khi mã vào và thoát khỏi các chức năng.

9

Tôi khuyên bạn nên xem xét sử dụng hàm depfun để tạo biểu đồ cuộc gọi. Xem http://www.mathworks.com/help/techdoc/ref/depfun.html để biết thêm thông tin.

Cụ thể, tôi thấy rằng gọi số depfun với đối số '-toponly', sau đó lặp qua kết quả, là cách tuyệt vời để tạo biểu đồ cuộc gọi bằng tay. Rất tiếc, tôi không còn có quyền truy cập vào bất kỳ mã nào mà tôi đã viết bằng cách sử dụng này.

0

Tôi đồng ý với câu trả lời m2html, tôi chỉ muốn nói rằng làm theo tấm gương từ m2html tài liệu/Mdot là tốt:

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

Nhưng tôi đã may mắn hơn với xuất khẩu sang pdf:

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

Ngoài ra, trước khi bạn thử các lệnh ở trên bạn phải ra một cái gì đó như sau:

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