2010-02-01 34 views
10

Tôi muốn tạo các Cây gọi đầy đủ và một phần từ cơ sở dữ liệu cscope của các dự án c và C++ trong Linux.Tạo Call-Tree từ cơ sở dữ liệu cscope

Dự án khá lớn, vì vậy có thể không dễ dàng khi làm việc với cây gọi đầy đủ của dự án, vì vậy tôi muốn hạn chế tạo cây cuộc gọi bằng bộ lọc tên hàm grep.

Và tôi cũng muốn có thể tạo các cây con "được gọi" và "được gọi từ" từ bất kỳ điểm nào.

Vì vậy, công cụ phải tương tác và dễ vá.

PS: Tôi muốn sử dụng cơ sở dữ liệu cscope, vì nó đã được sử dụng trong dự án và tạo ra nó khá nhanh. Tôi sử dụng trình soạn thảo vim và có hệ thống cửa sổ X.

Có chương trình trình duyệt cbrowser trên sourceforge, nhưng chức năng gọi cây (callgraph) bị hỏng.

+0

Và cscope có thực hiện các cuộc gọi phương thức gián tiếp hoặc ảo không? Nếu không, ý nghĩa của "cây cuộc gọi đầy đủ" của bạn là gì?Nếu bạn sẵn sàng giải quyết cho một "cây gọi một phần", làm thế nào một phần nó có thể được (cây gọi trống là một cây gọi một phần hợp lệ, nhưng không phải là rất thú vị). –

+0

Tôi sử dụng cscope cho dự án C. Tôi không cần nó là rất chính xác, chỉ đến mức độ như cscope với các truy vấn "cuộc gọi đến" và "gọi từ". Tôi muốn nhận đầy đủ biểu đồ gọi hàm trong dự án lớn c. Nó phải bao gồm các cuộc gọi hàm rõ ràng. bất cứ điều gì khác là tùy chọn. – osgx

Trả lời

1

Tôi không biết bất kỳ chương trình nào, ngoài cscope, đọc cơ sở dữ liệu cscope. Ngay cả chức năng cstag của vim chỉ bắt đầu một quá trình nền cscope mà nó truy vấn.

Đối với việc tạo biểu đồ cuộc gọi, nếu bạn không phiền khi bước ra ngoài cscope, tôi thích những gì doxygen tạo ra. Chúng có thể lớn một chút, nhưng nó cũng tạo ra đồ thị từ hầu như tất cả các điểm, và thật dễ dàng để duyệt trực tiếp nguồn trong nó.

+0

cbrowser từ sourceforge không đọc cscope db. – osgx

1

kscope có thể là một tùy chọn khác. Tôi không chắc chắn nếu nó sẽ làm tất cả mọi thứ quy định, nhưng nó là khá linh hoạt cho một ứng dụng GUI.

Người dùng Ubuntu gặp sự cố khi chạy nó được khuyên nên theo dõi these instructions.

+0

lượt chia sẻ màn hình của cây gọi dường như là http://sourceforge.net/dbimage.php?id=200328 – osgx

+0

@osgx: Cảm ơn. Mặc dù tôi không chắc liệu OP có đang tìm kiếm một cái cây theo nghĩa đó hay cho một [call * graph *] (http://kscope.sourceforge.net/callgraph.png). – intuited

+0

im đang tìm kiếm cả hai. cây là tốt, callgraph là tốt hơn, và tốt nhất là callgraph cho một phần của funcions. (được lọc hoặc biểu đồ con). Và tôi là một OP :) – osgx

1

tôi đã Bash script này cscope dựa trên làm việc trong Cygwin & Windows: http://toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

Xem ví dụ gọi là "đồ thị" (Tôi đã gọi đó là một cuộc gọi "cây", tả). See example from the Linux kernel.

Nó yêu cầu cscope (tất nhiên) và graphviz. Nó có thể làm đồ thị ngược dòng và hạ lưu, cũng như kết hợp các biểu đồ xuống & (xem ví dụ).

Tôi chưa trình diễn ở đây nhưng phương pháp này hoạt động khá tốt trên các dự án lớn có cùng chức năng được xác định trong nhiều thư mục. Sẽ chỉ có một nút được vẽ cho cùng một tên hàm (vì vậy một nút "chính" ngay cả khi bạn có nhiều chính() được định nghĩa trong cấu trúc thư mục của bạn) --- và bạn sẽ có nhiều cạnh phát ra từ một nút như vậy , với chỉ báo tập tin/dòng. Tôi thấy khía cạnh này hữu ích hơn GNU cflow, điều này nhấn mạnh vào việc chỉ chọn một thư mục để xem. (Kịch bản lệnh Jason Nyberg Bash không hoạt động tốt với luồng, mà GNU cflow xử lý độc đáo; .)

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