2011-10-23 22 views
7

Đối với Delphi 2010, là có một cách để có được một sơ đồ, bắt đầu với chức năng X (hoặc thậm chí toàn bộ chương trình), những gì các chức năng khác/thủ tục này được gọi là ...Có cách nào để nhận được sơ đồ những gì gọi là gì không?

cái gì đó dọc theo dòng:

Function X 
    - Function A 
    - Procedure B 
    - Procedure C 
    - Function D 

(Tất nhiên đồ họa sẽ đẹp hơn ...)

+1

Có liên quan nhưng khác nhau; Các tính năng UML của Delphi Enterprise/Architect chứa hỗ trợ cho biểu đồ trình tự. Không chính xác những gì bạn đang yêu cầu, tôi nghi ngờ, nhưng có liên quan. Ví dụ về sơ đồ tuần tự từ một công cụ khác là ở đây: http://www.ibm.com/developerworks/rational/library/3101.html –

+0

Nhìn vào 2 năm sau, tôi ước rằng OP đã chỉ ra liệu anh ta có đang tìm kiếm tĩnh hay không cây gọi động. – Mawg

Trả lời

9

Peganza Pascal Analyzer cung cấp cả call treereverse call tree báo cáo. Có một số trình phân tích mã tĩnh khác có sẵn, nhưng đây là bản phân tích mà tôi quen thuộc.

Cho đến giờ tôi biết, không có gì trong bản chất này được xây dựng trong Delphi.

+2

AQTime (được bao gồm với Delphi bây giờ tôi nghĩ) sẽ cho bạn thấy cây gọi của một mã cụ thể chạy. –

+0

@david đó là phân tích động phải không? –

+0

AQTime thực hiện cả phân tích tĩnh và động, và Peganza PAL chỉ phân tích tĩnh. AQTime có nhiều màn hình hiển thị đồ họa hơn, trong khi đầu ra Peganza là văn bản, bạn có thể xuất dưới dạng văn bản thuần hoặc xml và sau đó tự xây dựng biểu đồ. PAL không thể tìm thấy rất nhiều chuỗi cuộc gọi thực tế diễn ra động, như gọi lại sự kiện, hoặc thậm chí cả trường hợp các lớp dẫn xuất ghi đè các phương thức ảo, sau đó gọi những thứ khác không được gọi bằng phương thức lớp cơ sở, v.v. Đối với điều đó, phân tích động sẽ được yêu cầu. –

3

Dưới đây là ví dụ về biểu đồ cuộc gọi AQTime. Các chuỗi cuộc gọi của AQTime có thể được tập hợp động (thu thập từ một chương trình đang chạy) có nghĩa là bạn phải kích hoạt đường dẫn mã bạn muốn biểu đồ (đảm bảo một số menu hoặc nút bạn có thể nhấp vào giao diện người dùng gọi mã này) và sau đó bạn có thể biểu đồ nó, hoặc chúng có thể được thu thập tĩnh. Cái động lực có vẻ như có nhiều công việc hơn, và bạn có thể nghĩ rằng phân tích tĩnh tốt hơn, và theo cách nào đó phân tích tĩnh tốt hơn, nhưng biểu đồ chuỗi cuộc gọi động thực sự là "những gì thực sự xảy ra trong một lần chạy cụ thể" trong khi phân tích tĩnh cung cấp " trình phân tích cú pháp có thể tìm ra được luôn đúng, dù đường dẫn mã này có được chạy bởi bạn hay khách hàng của bạn hay không ". Trong thực tế, tôi khuyên bạn nên sử dụng cả hai đường dẫn và so sánh chúng để xem những gì bạn học.

enter image description here

AQTime pro là khá đắt tiền, nhưng tôi không biết về bất kỳ lựa chọn thay thế miễn phí. (Không, tôi không làm việc cho SmartBear, hay Embarcadero.). Tôi là một nhà phát triển chuyên nghiệp và tôi thấy rằng những công cụ như vậy đáng giá. Cuộc gọi của bạn.

Tôi thường sử dụng tính năng tự gọi khi chạy từ các hồ sơ thực hiện, vì vậy mà tôi nhận được một số giá trị thời gian (digram dưới đây cho thấy Time: #.## msec vì dữ liệu được thu thập bởi các hồ sơ hiệu suất, năng động, chứ không phải bởi các tĩnh phân tích hồ sơ, mà không biết bao lâu một chức năng để thực hiện).

Các vấn đề liên quan