Geting-Kontrollflussdiagramm aus dem ANSI C-Code

8

Ich baue ein Tool zum Testen von anis 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, Zeilennummern zu erhalten, wenn Sie Control Flow Graph mit -fdump-tree-cfg oder -fdump-tree-vcg ausgeben?

    
Eloar 06.05.2013, 07:23
quelle

2 Antworten

6

Also habe ich etwas mehr Nachforschungen angestellt und es ist nicht schwer, Zeilennummern für Knoten zu bekommen. Fügen Sie einfach lineno -Option zu einer dieser Optionen hinzu, um sie zu erhalten. Verwenden Sie also -fdump-tree-cfg-lineno oder -fdump-tree-vcg-lineno . Ich habe einige Zeit gebraucht, um zu überprüfen, ob diese Zahlen zuverlässig sind. Im Falle eines Graphen im VCG Format enthält das Label jedes Knotens zwei Zahlen . Dies sind Zeilennummern für den Anfang und das Ende des Codeabschnitts, die von diesem Knoten dargestellt werden.

    
Eloar 09.05.2013, 06:15
quelle
15

Für das Kontrollflussdiagramm eines C-Programms könnten Sie vorhandene Python-Parser für C betrachten:

Call-Graphen sind ein eng verwandtes Konstrukt zur Steuerung von Flow-Graphen. Es gibt verschiedene Ansätze, um Call-Graphen (Funktionsabhängigkeiten) für C-Code zu erstellen. Dies könnte hilfreich sein, um mit der Erzeugung von Kontrollflussgraphen fortzufahren. Möglichkeiten zum Erstellen von Abhängigkeitsgraphen in C:

Die folgenden Tools erfordern leider, dass der Code kompilierbar ist, da sie von der Ausgabe von gcc abhängen:

  • CodeViz (GPL v2) (Schwachstelle: Benötigt kompilierbare Quelle, da gcc verwendet wird, um cdepn zu löschen Dateien)
  • gcc + Ägypten + Punkt ( GPL v *, Perl = GPL | Künstlerische Lizenz, EPL v1) ( egypt verwendet gcc , um RTL zu erzeugen, also scheitert es an einem fehlerhaften Quellcode, oder falls Sie sich nur auf eine einzelne Datei konzentrieren wollen ein größeres Projekt, daher ist es nicht sehr nützlich im Vergleich zu den robusteren cflow -basierten Toolchains. Beachten Sie, dass Ägypten standardmäßig eine gute Unterstützung für das Ausschließen von Bibliotheksaufrufen aus dem Graphen bietet, um es sauberer zu machen.

Außerdem können Dateiabhängigkeitsgraphen für C / C ++ mit crowfood erstellt werden.

    
Ioannis Filippidis 24.07.2013 20:34
quelle

Tags und Links