2013-05-06 31 views
8

Tôi là công cụ xây dựng để thử nghiệm các ứng dụng ansi c. Đơn giản chỉ cần tải mã, xem biểu đồ dòng điều khiển, chạy thử nghiệm, đánh dấu tất cả các đỉnh được nhấn. Tôi đang cố gắng xây dựng CFG một mình bằng cách phân tích mã. Thật không may Nó bị sai lầm nếu mã được lồng nhau. GCC cung cấp khả năng nhận CFG từ mã được biên dịch. Tôi có thể viết phân tích cú pháp cho đầu ra của nó, nhưng tôi cần số dòng để thiết lập các điểm ngắt. Có cách nào để nhận số dòng khi xuất biểu đồ kiểm soát với -fdump-tree-cfg hoặc -fdump-tree-vcg?Lấy đồ thị điều khiển luồng từ mã ANSI C

+0

Bản sao có thể có của [Công cụ để lấy biểu đồ gọi hàm chức năng hình ảnh] (http://stackoverflow.com/questions/517589/tools-to-get-a-pictorial-function-call-graph-of-code) –

Trả lời

6

Vì vậy, tôi đã thực hiện một số nghiên cứu thêm và không khó để có được số dòng cho các nút. Chỉ cần thêm tùy chọn lineno vào một trong các tùy chọn đó để nhận. Vì vậy, hãy sử dụng -fdump-tree-cfg-lineno hoặc -fdump-tree-vcg-lineno. Phải mất một thời gian để kiểm tra xem những con số đó có phải là đáng tin cậy. Trong trường hợp đồ thị trong nhãn hiệu VCG của mỗi nút chứa hai số. Đó là các số dòng cho phần bắt đầu và kết thúc của mã được đại diện bởi nút này.

15

Đối với đồ thị luồng điều khiển của một chương trình C bạn có thể nhìn vào parsers Python hiện tại cho C:

Biểu đồ cuộc gọi là cấu trúc liên quan chặt chẽ để kiểm soát biểu đồ luồng. Có một số phương pháp có sẵn để tạo biểu đồ cuộc gọi (phụ thuộc hàm) cho mã C. Điều này có thể chứng minh sự trợ giúp cho việc phát triển với việc tạo biểu đồ dòng điều khiển. cách để tạo ra các đồ thị phụ thuộc vào C:

  • Sử dụng cflow:

    • cflow + pycflow2dot + dot (GPL, BSD) cflow là mạnh mẽ, bởi vì nó có thể xử lý mã mà không thể biên dịch, ví dụ thiếu bao gồm. Nếu chỉ thị tiền xử lý được sử dụng nhiều, có thể cần tùy chọn --cpp để xử lý trước mã.
    • cflow + cflow2dot + dấu chấm (GPL v2, GPL v3, Eclipse Public License (EPL) v1) (lưu ý cflow2dot mà cần một số con đường sửa chữa trước khi nó hoạt động)
    • cflow + cflow2dot.bash (GPL v2,?)
    • cflow + cflow2vcg (GPL v2, GPL v2)
    • enhanced cflow (GPL v2) với danh sách để loại trừ những biểu tượng từ biểu đồ
  • Sử dụng cscope:

  • ncc (cflow thích)

  • KCachegrind (trình xem phụ thuộc KDE)
  • Calltree

Các công cụ sau đây không may yêu cầu mã được biên dịch được, vì chúng phụ thuộc vào sản lượng từ gcc:

  • CodeViz (GPL v2) (điểm yếu: nhu cầu nguồn biên dịch được, vì nó sử dụng gcc để kết xuất tệp cdepn)
  • gcc + egypt + dấu chấm (GPL v *, Perl = GPL | Giấy phép nghệ thuật, EPL v1) (egypt sử dụng gcc để sản xuất RTL, vì vậy không thành công cho bất kỳ mã nguồn lỗi nào hoặc thậm chí trong trường hợp bạn chỉ muốn tập trung vào một tệp từ một dự án lớn hơn. Do đó, nó không hữu ích lắm so với mạnh mẽ hơn cflow dãy công cụ dựa trên. Lưu ý rằng Ai Cập có hỗ trợ mặc định tốt để loại trừ các cuộc gọi thư viện từ biểu đồ, để làm cho nó rõ ràng hơn.

Ngoài ra, đồ thị tập tin phụ thuộc cho C/C++ có thể được tạo ra với crowfood.

+0

Đồ thị cuộc gọi không phải là thứ tôi cần. Tôi cần các chi nhánh trực quan trong mã. Tôi phải hiển thị tất cả các vòng và điểm quyết định trong mã cho người dùng. Tôi đã tạo trình phân tích cú pháp của riêng mình cho VCG, nhưng tôi sẽ kiểm tra các công cụ mà bạn đã đăng. – Eloar

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