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
Trả lời
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.
Đố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:
- PyCParser
- pycparser
- pyclibrary (ngã ba của pyclibrary)
- joern
- CoFlo Máy phát và phân tích biểu đồ dòng chảy điều khiển C/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 đồ
- 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
Sử dụng cscope:
- cscope (BSD)
- cscope + callgraphviz + chấm + xdot
- cscope + vim CCTree (C Call -cây Explorer)
- cscope + ccglue
- cscope + CodeQuery cho C, C++, Python & Java
- cscope + Python html producer
- cscope + calltree.sh
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ụnggcc
để sản xuấtRTL
, 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ơncflow
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
.
Đồ 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
- 1. Lấy biểu đồ luồng điều khiển từ Cây cú pháp trừu tượng
- 2. Xây dựng chính thức Biểu đồ luồng điều khiển
- 3. Tự động tạo sơ đồ khối chức năng từ mã ansi c
- 4. Lấy đầu vào từ cần điều khiển bằng C# .NET
- 5. VLC điều khiển từ xa từ C#
- 6. Tại sao RedirectStandardOutput không có mã ANSI cần thiết?
- 7. Công cụ để tạo biểu đồ phụ thuộc chức năng Haskell (luồng điều khiển)?
- 8. để hiển thị biểu diễn sơ đồ mã c
- 9. Làm thế nào để viết một giao diện điều khiển menu trong ANSI/ISO C?
- 10. cách mã trình điều khiển?
- 11. Điều khiển TreeView trong C#, chọn() và lấy nét
- 12. Cách ẩn mã thoát màu ANSI từ fmt
- 13. Ẩn cửa sổ bảng điều khiển từ Process.Start C#
- 14. Lấy đồ thị cổ phiếu từ tài chính yahoo
- 15. Sắp xếp lại các điều khiển trong bảng điều khiển bố cục luồng
- 16. Zend Framework - lấy bộ điều khiển phía trước từ bootstrap?
- 17. Lấy tên bộ điều khiển từ bộ điều khiển chính nó
- 18. dải Query được lấy ra từ mở đồ thị url
- 19. Cách hiển thị partials từ một Bộ điều khiển khác
- 20. Điều khiển biểu đồ WPF
- 21. Thư viện vẽ đồ thị C#?
- 22. Điều khiển hiển thị trên một bảng điều khiển khác
- 23. C++ phụ thuộc mã/gọi đồ thị "người xem"?
- 24. Cách lấy đường dẫn từ thư mục trong ứng dụng giao diện điều khiển C#?
- 25. C# Winforms: Hiển thị Hiệu quả Nhiều Điều khiển
- 26. Ứng dụng giao diện điều khiển đa luồng C# - Bàn điều khiển thoát trước khi hoàn thành các chủ đề
- 27. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 28. cách lấy giá trị số từ điều khiển chỉnh sửa
- 29. Đồ họa DrawString với điều khiển từ gói
- 30. angularjs: phát sóng từ chỉ thị để điều khiển
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) –