Spaghetti-Code-Visualisierungssoftware?

Lesezeit: 4 Minuten

Benutzer-Avatar
Der Ap

Ein rauchender Haufen Spaghetti ist gerade auf meinem Schreibtisch gelandet, und meine Aufgabe ist es, ihn zu verstehen (damit ich ihn umgestalten / neu implementieren kann).

Der Code ist C und ein Durcheinander von globalen Variablen, Strukturtypen und Funktionsaufrufen.

Ich möchte Diagramme des Codes mit den Informationen zeichnen:
– Anrufdiagramm
– Welche Strukturtypen in welchen Funktionen verwendet werden
– Welche globale Variable wird in welcher Funktion verwendet

Hoffentlich würde dies es einfacher machen, verbundene Komponenten zu identifizieren und sie in separate Module zu extrahieren.

Ich habe die folgende Software für ähnliche Zwecke ausprobiert:
– ncc
– Tags
– Codeviz / Gengraph
– Sauerstoff
– Ägypten
– Cflow
EDIT2:
-frama-c
– Schnüffler
– Verstehe

Die Mängel dieser sind entweder
a) erfordert, dass ich den Code kompilieren kann. Mein Code lässt sich nicht kompilieren, da Teile des Quellcodes fehlen.
b) Probleme mit Präprozessor-Makros (wie cflow, der beide Zweige von #if-Anweisungen ausführen möchte). Wenn Sie es über cpp laufen lassen, werden die Zeilennummern durcheinander gebracht.
c) Ich schaffe es aus irgendeinem Grund nicht, die Software dazu zu bringen, das zu tun, was ich tun möchte (wie z. es lohnt sich wahrscheinlich nicht, mehr Zeit damit zu verbringen, mehr über die Konfigurationsoptionen von doxygen zu erfahren). BEARBEITEN: Ich habe diese Doxygen-Anweisungen befolgt, aber es wurden nur Header-Datei-Abhängigkeiten dargestellt.

Ich bin auf Linux, also ist es a riesig Plus, wenn die Software für Linux und kostenlose Software ist. Ich bin mir nicht sicher, ob mein Chef die Notwendigkeit versteht, einen Visualizer zu kaufen 🙁

Zum Beispiel: Ein Kommandozeilentool, das auflistet, in welchen Funktionen ein Symbol (=Funktion,Variable,Typ) referenziert wird, wäre eine große Hilfe (wie addr2line, aber für Typen/Variablennamen/Funktionen und Quellcode).

//T

  • “Es durch cpp laufen zu lassen, würde die Zeilennummern durcheinander bringen.” – das könnte Sie interessieren Coan (siehe diese Antwort)

    – dezent

    26. Juli 2011 um 8:22 Uhr

  • coan kann in der Tat hilfreich sein, um das Präprozessor-Chaos zu vereinfachen. Vielen Dank!

    – Der Ap

    26. Juli 2011 um 9:28 Uhr

Benutzer-Avatar
Fredrik Pihl

Meine Stimme geht an gnu global. Es hat alle Funktionen von ctags/cscope kombiniert sowie die Möglichkeit, vollständig indiziertes HTML zu generieren, mit dem Sie den Code in Ihrem bevorzugten Browser durchsuchen können. Starten Sie es in Apache und Sie haben einen Webdienst, auf den jeder zugreifen kann, einschließlich vollständiger Suchfunktionen.

Es lässt sich gut in emacs/vim/sogar die Bash-Shell integrieren, und Sie können es direkt vom Shell-Prompt aus verwenden.

Um es auf dem Linux-Kernel in Aktion zu sehen, besuchen Sie Dies

Kombinieren Sie dies mit einem Werkzeug für zyklomatische Komplexität Plugin für Eclipse die die Komplexität Ihres Codes berechnet. neben der zyklomatischen Komplexität, die es handhaben kann:

  • Cyclomatische Komplexität nach McCabe
  • Efferente Kupplungen
  • Mangelnde Kohäsion in Methoden
  • Codezeilen in der Methode
  • Anzahl der Felder
  • Anzahl der Ebenen
  • Anzahl der Einheimischen im Geltungsbereich
  • Anzahl der Parameter
  • Anzahl der Anweisungen
  • Gewichtete Methoden pro Klasse

…und Sie sollten alles haben, was Sie brauchen.

  • GNU Global scheint eine Obermenge von ctags zu sein und hat einen Großteil der Funktionalität von cscope. Ich versuche jedoch immer noch herauszufinden, wie ich die Funktionen anzeigen kann, bei denen beispielsweise eine bestimmte Struktur oder Typedef verwendet wird.

    – Der Ap

    26. Juli 2011 um 8:56 Uhr


  • Es wäre toll, wenn GNU Global wurde direkt in Eclipse unterstützt.

    – Craig McQueen

    19. Juni 2012 um 5:57 Uhr

Wenn Sie die Befehlszeile mögen 😉 könnten Sie es vielleicht versuchen Umfangführt es eine statische Analyse des Codes durch und kann Ihnen sagen, wo auf einige Symbole / Variablen / Funktionen verwiesen wird … Nicht der heilige Gral, aber es kann ziemlich nützlich sein, unbekannten Quellcode zu durchsuchen.

Es gibt auch einige GUIs, die csope-Ergebnisse verarbeiten können (Vi, Emacs, JEdit…).

Auf der anderen Seite, Eclipse mit dem CDT-Plugin kann Ihnen auch helfen, in den Spaghetti-Code zu navigieren, den Sie pflegen müssen.

  • +1 für Eclipse, obwohl Sie, wenn der Code nicht kompiliert, möglicherweise einige Header-Dateien hinzufügen müssen, die von Hand indiziert werden sollen.

    – haggai_e

    26. Juli 2011 um 9:28 Uhr

Es ist nicht kostenlos und afaik nicht Linux, aber cppDepend könnte eine Bewertung wert sein – zumindest bis jemand einen passenderen Vorschlag hat 🙂

http://www.cppdepend.com/ [Demo video here]

Wenn Sie wissen möchten, in welchen Funktionen ein Symbol deklariert oder referenziert wird, können Sie es versuchen LXR. Es ist nicht konsolenbasiert, aber durchaus brauchbar.

1355370cookie-checkSpaghetti-Code-Visualisierungssoftware?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy