2012-01-19 39 views
5

Có ai biết một công cụ có thể tạo "sơ đồ hàm" từ mã ansi c không?Tự động tạo sơ đồ khối chức năng từ mã ansi c

Bằng "sơ đồ hàm" tôi ngụ ý biểu đồ thể hiện tổng quan về tệp, chức năng và mối quan hệ của chúng. Tôi tưởng tượng nó giống như một biểu đồ circut.

Ví dụ: nếu có đoạn mã sau:

//MyProgram.c 
int main(int argc, char** argv) 
{ 
    Foo(); 
    Bar(); 
    return 0; 
} 

//Slave.h 
void Foo(); 
void Bar(); 

Biểu đồ sẽ là một cái gì đó giống như hình ảnh sau:

Function relation diagram http://i44.tinypic.com/503z7q.png

Liệu nó có một cái tên chính thức? Sơ đồ phụ thuộc, có lẽ?

Tôi đã xem xét một chút về Doxygen. Nhưng một trong những tuyên bố rõ ràng rằng: Doxygen đã được xây dựng trong hỗ trợ để tạo ra các sơ đồ thừa kế cho các lớp C++. Điều tương tự với nhiều công cụ UML. Tôi không có bất kỳ lớp học nào. Mặc dù các tệp c của tôi có thể đến gần.

+0

Có lẽ tôi nên thêm rằng mục đích của tôi với sơ đồ, là trình bày tổng quan về một dự án mã đã cho. Một bàn tay hữu ích trong "tìm đúng nơi để tìm, trong mã". Nhóm các tập tin và libs là quan trọng. Và các mối quan hệ chức năng sẽ cung cấp cho nội dung thực tế. Có lẽ bạn biết một sơ đồ tốt hơn? Một cái gì đó tập tin/lib dựa? – Illishar

+0

"Đồ thị phụ thuộc" tại đây: http://msdn.microsoft.com/en-us/library/ff657798.aspx, thực sự trông khá tốt. Nó thiếu quan hệ chức năng. – Illishar

+0

doxygen có khả năng trích xuất tất cả các loại biểu đồ, không chỉ biểu đồ kế thừa. –

Trả lời

5

Nội dung bạn đề cập được gọi là Call Graph.

Có một danh sách các công cụ để tạo ra chúng: http://en.wikipedia.org/wiki/Call_graph#Software

+0

Hầu hết các đồ thị cuộc gọi mà tôi đã nhìn thấy, đặt tất cả các chức năng vào một thùng lớn và sau đó tạo ra một cây (nếu may mắn). Họ rất đẹp khi làm hồ sơ. Trong trường hợp này, tôi quan tâm nhiều hơn đến mối quan hệ giữa các tệp, hơn là chuỗi biểu đồ cuộc gọi. UML sẽ là một hit tốt hơn tôi nghĩ. Nhưng có lẽ bạn có một chương trình cụ thể trong tâm trí? – Illishar

+0

Hầu hết các đồ thị cuộc gọi hỗ trợ của IDE trong những ngày này. – dicaprio

+0

Tôi đã xem qua danh sách và tôi không thể tìm thấy bất kỳ thứ gì có thể tạo "biểu đồ cuộc gọi được sắp xếp theo thứ tự tệp". Chúng chỉ là những cây có chức năng gọi chính là nút trên cùng. (Và tôi không thực sự tìm kiếm cây cối chút nào.) – Illishar

3

vài Có phần mềm mà không được tự do nữa ví dụ www.scitools.com trong đó có một công cụ gọi là Understand C. Điều này tôi chắc chắn sẽ làm những gì bạn đang tìm kiếm, có những công cụ khác như BOUML (đây là công cụ miễn phí). Ngoài danh sách này được cung cấp bởi qiao là tham chiếu tốt.

+0

BOUML dành cho C++ – Illishar

+0

scitool có một số đồ thị thú vị. Biểu đồ phụ thuộc của họ là gần: http://www.scitools.com/images/features/dependenciesGraph.png. Tuy nhiên nó không hiển thị các mối quan hệ chức năng và nó chắc chắn không đưa ra một cái nhìn tổng quan. Bất cứ ai nhìn vào những điều này sẽ chạy đi screeming. (Một vấn đề về hương vị và sự phức tạp có lẽ.) – Illishar

+0

đúng, nhưng nó vẫn làm những gì bạn cần. Tôi cho rằng bạn không muốn tạo hoặc tạo lại mã. – dicaprio

0

Tôi nghĩ rằng tôi đã tìm thấy nguồn gốc ý tưởng của mình. Hiển thị mã là "các thành phần có đầu vào/đầu ra được kết nối" là khái niệm LabVIEW. (Tôi không phải là một nutter hoàn chỉnh để tìm ra sơ đồ loại này sau đó;)

Tuy nhiên theo như tôi biết, LabVIEW không làm những gì tôi muốn. LabVIEW dùng để xây dựng và kết nối chức năng. Được sử dụng rộng rãi bởi hw/fw người. (Đó cũng là đối tượng mục tiêu của tôi.) Nó sẽ không đảo ngược mã kỹ sư thành biểu đồ.

Lạ lẫm rằng các biểu đồ này không thực sự tồn tại. Dường như với tôi rằng những người như lập trình viên nhúng, ansi c, cấp thấp, hw, vv sẽ yêu họ.

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