Ich baue Tool zum Testen ansi c Anwendungen. Einfach Code laden, Kontrollflussdiagramm anzeigen, Test ausführen, alle Eckpunkte markieren, die getroffen wurden. Ich versuche, CFG ganz allein aus dem Parsing-Code zu erstellen. Leider wird es durcheinander gebracht, wenn Code verschachtelt ist. GCC bietet die Möglichkeit, CFG aus kompiliertem Code zu erhalten. Ich könnte Parser für seine Ausgabe schreiben, aber ich brauche Zeilennummern zum Setzen von Haltepunkten. Gibt es eine Möglichkeit, bei der Ausgabe von Control Flow Graph mit -fdump-tree-cfg
oder -fdump-tree-vcg
Zeilennummern zu erhalten?Geeting Control Flow Graph von ANSI C-Code
Antwort
Also habe ich etwas mehr Forschung gemacht und es ist nicht schwer, Zeilennummern für Knoten zu bekommen. Fügen Sie einfach lineno
Option zu einer dieser Optionen hinzu, um es zu bekommen. Verwenden Sie also -fdump-tree-cfg-lineno
oder -fdump-tree-vcg-lineno
. Es dauerte einige Zeit, um zu überprüfen, ob diese Zahlen zuverlässig sind. Im Falle eines Graphen in VCG Format-Label jedes Knotens enthält zwei Nummern. Dies sind Zeilennummern für Anfang und Ende des durch diesen Knoten repräsentierten Codeabschnitts.
Für den Kontrollflussgraphen eines C-Programms Sie bei bestehenden Python-Parser für C aussehen könnte:
- PyCParser
- pycparser
- pyclibrary (Gabel pyclibrary)
- joern
- CoFlo C/C++ Kontrollflussdiagramm Generator und Analysator
Call-Graphen sind ein eng verwandtes Konstrukt zur Steuerung von Flow-Graphen. Es gibt mehrere Ansätze zum Erstellen von Call-Graphen (Funktionsabhängigkeiten) für C-Code. Dies könnte hilfreich sein, um mit der Generierung von Kontrollflussgraphen fortzufahren. Wege zur Abhängigkeitsgraphen in C:
Mit cflow:
- cflow + pycflow2dot + dot (GPL, BSD) cflow ist robust, da es Code verarbeiten kann, die nicht kompiliert werden können, beispielsweise fehlende umfasst. Wenn Präprozessordirektiven stark verwendet werden, muss möglicherweise die Option den Code vorverarbeiten.
- cflow + cflow2dot + Punkt (GPL v2 GPL v3, Eclipse Public License (EPL) v1) (beachten Sie, dass cflow2dot einig Weg zur Festsetzung muss, bevor es funktioniert)
- cflow + cflow2dot.bash (GPL v2? )
- cflow + cflow2vcg (GPL v2, GPL v2)
- enhanced cflow (GPL v2) mit der Liste auszuschließen Symbole aus der Graphen
Mit cscope:
- cscope (BSD)
- cscope + callgraphviz + dot + xdot
- cscope + vim CCTree (C Anruf -Baum Explorer)
- cscope + ccglue
- cscope + CodeQuery für C, C++, Python & Java
- cscope + Python html producer
- cscope + calltree.sh
ncc (CFLOW mögen)
- KCachegrind (KDE Abhängigkeitsbetrachter)
- Calltree
Die folgenden Tools leider erforderlich, dass der Code übersetzbar sein, weil sie bei der Ausgabe von gcc abhängen:
- CodeViz (GPL v2) (Schwachpunkt: needs übersetzbar Quelle, weil es verwendet gcc zum dump cdepn dateien)
- gcc + egypt + dot (GPL v *, Perl = GPL | Künstlerische Lizenz, EPL v1) (
egypt
verwendetgcc
, umRTL
zu produzieren, so dass es keinen Buggy-Quellcode gibt, oder falls Sie nur auf eine einzelne Datei aus einem größeren Projekt konzentrieren wollen. Daher ist es im Vergleich zum robustercflow
-basierte Werkzeugketten. Man beachte, dass ägypten für den Ausschluss der Bibliothek Anrufe aus der grafischen Darstellung, die standardmäßig eine gute Unterstützung hat sauberer zu machen.
auch Dateiabhängigkeitsgraphen für C/C++ kann mit crowfood
erstellt werden.
Call Graph ist nicht das, was ich brauche. Ich brauche visuelle Zweige in Code. Ich muss alle Schleifen und Entscheidungspunkte im Code dem Benutzer zeigen. Ich habe meinen eigenen Parser für VCG erstellt, aber ich werde die von Ihnen geposteten Tools überprüfen. – Eloar
- 1. Wie konnte ich Java CFG (Control Flow Graph) mithilfe von antlr generieren?
- 2. Signed arithmetic/control-flow in DCPU-16?
- 3. Bash Control Flow springt zu anderen egal
- 4. PHP Application Flow Graph (oder Funktionsaufruf)
- 5. Steuerung Flow-Graph-Generator für C# Code
- 6. Praktische Unterschiede zwischen Kontrollflussdiagramm und Call (Flow?) Graph?
- 7. Graph Control für Windows Universal Apps
- 8. Wie verwende ich CCode-Attribute in Vala?
- 9. Code Academy, Conditionals und Control Flow Grand Finale
- 10. TBB Flow Graph bedingte Ausführung UND mehrere Ein- und Ausgänge
- 11. Node Coroutines Parallel Flow Control mit Generatoren und Promise
- 12. ANSI vs. nicht-ANSI SQL JOIN-Syntax
- 13. ansi c Strukturinitialisierung von c99
- 14. Von WPF Control zu Silverlight Control
- 15. Angular mit ng-flow: existing flow objekt
- 16. Java Flow
- 17. Java „ANSI Konstanten“
- 18. Warum bin ich geeting Index Out Of Bounds Ausnahmefehler
- 19. PHP entschlüsseln ANSI-Zeichen
- 20. akka-stream - So behandeln Sie das letzte Element eines Streams anders in einem Flow/Graph
- 21. Bitmanipulationsbibliothek für ANSI C
- 22. ANSI SQL Handbuch
- 23. Konvertieren von Problem ANSI zu UTF8 C#
- 24. ANSI-SQL-Version von SELECT TOP 1
- 25. Inkonsistenz von Graph API
- 26. Panel Control Paint Event funktioniert nicht für User Control
- 27. ANSI Grafikcodes und Python
- 28. ANSI Coloring im Kompilierungsmodus
- 29. Biteinstellung in Ansi C
- 30. `Klirren -ansi` Erweiterungen
Mögliches Duplikat von [Werkzeuge, um eine grafische Funktionsaufrufgrafik des Codes zu erhalten] (http://stackoverflow.com/questions/517589/tools-to-get-a-pictorial-function-call-graph-of-code) –