Tool zur Visualisierung des Codeflusses (C / C ++) [geschlossen]

76

Haben Sie Vorschläge für Tools, die das Verständnis von C / C ++ - Code erleichtern? Wir haben gerade eine große Software geerbt, die von anderen geschrieben wurde, und wir müssen uns schnell damit vertraut machen. Irgendwelche Ratschläge zu Tools, die diese Aufgabe vereinfachen könnten?

Dprado
quelle
14
@casperOne: warum ist das "nicht konstruktiv"?! Es ist für jeden nützlich ... und konstruktiv!
Dagnelies
@arnaud Einkaufslistenfragen sind nicht konstruktiv. blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping
casperOne
8
@casperOne: Der Artikel, den Sie erwähnen, beschreibt Fragen zu Empfehlungen für den Kauf von Hardware usw. Auf jeden Fall Fragen abzulehnen. In diesem Fall handelt es sich um Tools und Techniken zur Lösung eines bestimmten Problems, nämlich um das Verständnis von großem Code zu erleichtern. Ich persönlich finde die Brücke zwischen den beiden ziemlich groß.
Dagnelies
@arnaud Sie sind die gleichen, nur weil Sie kein Geld dafür ausgeben oder es kaufen (oder vielleicht auch nicht), heißt das nicht, dass Sie nicht versuchen, eine Liste von Dingen zu erbitten. Darüber hinaus spielt es keine Rolle, ob es sich um Hardware, Bibliotheken oder Tools handelt. Es gibt keine Möglichkeit, objektiv anzugeben, was besser ist als das andere. In diesem Meta-Beitrag finden Sie weitere Informationen dazu, warum Listenfragen
casperOne
1
grok2.com/code_comprehension.html
Ciro Santilli 4 冠状 冠状.. 事件 4.

Antworten:

28

SourceInsight und Understand für C ++ sind die besten Tools, die Sie für die Analyse von C / C ++ - Code einschließlich Flussdiagrammen erhalten können.

aku
quelle
7
Ich möchte wissen, ob irgendwelche Tools für Linux?
Yongqiang Zhou
CppDepend ( cppdepend.com ) generiert ein Anrufdiagramm , ein Abhängigkeitsdiagramm mit vielen interessanten Funktionen und funktioniert auch unter Linux.
James vom CppDepend Team
9

Die Profiling-Software gibt Ihnen eine Vorstellung davon, welche Funktionen aufgerufen wurden.

Wenn Sie Linux verwenden können, versuchen Sie es mit KCachegrind

Thorsten79
quelle
9

Doxygen ist sehr gut darin, Diagramme aus Code zu generieren, ohne Markup anzuwenden, wenn Sie die Option EXTRACT_ALL aktivieren. Sie müssen GraphViz installiert haben, damit Diagramme mit der Einstellung HAVE_DOT generiert werden. Ich finde, dass es unter Windows gut funktioniert, wenn DOT_PATH leer bleibt, aber unter OS / X immer direkt auf die Position des Punktwerkzeugs zeigen muss.

Es gibt einen ausgezeichneten Code Spelunking- Artikel in der ACM-Warteschlange, in dem mehr über die Verwendung von Sauerstoff und DTrace gesprochen wird.

Andy Dent
quelle
8

Persönlich benutze ich den Debugger. Führen Sie den Code durch und sehen Sie, was er tut und wohin er führt.

Sie können es jedoch über einige Dokumentationsgeneratoren ausführen, die (manchmal) helfen. Ein gutes Beispiel ist Sauerstoff .

gbjbaanb
quelle
+1 Debugger ist der einzige Weg, um den Code zu verstehen.
Tegiri Nenashi
8
Ich finde es ziemlich lächerlich , eine große Codebasis zu verstehen , mit der Sie keine Erfahrung haben. Versuchen Sie das bei einem Projekt wie Clang oder Linux. Du wirst verrückt werden. Gut für Code, mit dem ich vertraut bin, oder für kleine / mittlere Projekte IMHO.
Charles
1
Ich bin von Google hierher gekommen, weil ich seit vier Tagen mit dem Debugger herausgefunden habe, wo Code in einem großen Projekt geändert werden kann, ohne Erfolg.
Tomáš Zato - Wiedereinsetzung Monica
5

KScope basiert auf dem Dienstprogramm cscope, wenn Sie unter Linux (KDE) arbeiten. Das Beste, was ich jemals verwendet habe (und die ich ständig benutze), um in einen riesigen, unbekannten Code zu gelangen, den ich irgendwie ändern muss oder welche API ich für meine Bedürfnisse verwenden soll. Zu seinen Merkmalen gehört die Querverweisdatenbank, die auf vielfältige Weise durchsucht werden kann: Sie können alle Referenzen eines Symbols, seine globale Definition, Aufrufer / Anrufer einer Funktion und vieles mehr finden. Es hat sogar eine eingebaute IDE und die Möglichkeit, ein Anrufdiagramm anzuzeigen.


quelle
4

Doxygen gibt Ihnen Klassenbeziehungsdiagramme, wenn Sie graphviz verwenden, auch wenn Sie sich nicht speziell darauf vorbereitet haben.

Douglas Mayle
quelle
3

Es gibt einige Tools wie Ägypten http://www.gson.org/egypt/egypt.html , die funktionieren, aber nur, wenn Sie mit der erwarteten GCC-Version übereinstimmen, die zum Kompilieren des Codes verwendet wird, und mit der genauen Version des Callgraph-Generators. Gleiches gilt für codeviz http://www.csn.ul.ie/~mel/projects/codeviz/

Eine andere Option ist valgrind, das im Cachegrind-Modus verwendet wird (es generiert eine Art Callgraph, dem Sie aus dem Programm kcachegrind folgen können.

Alter Mann
quelle
1

Ich persönlich verwende Visual Studio-Debugger-Tools.

Es kommt mit der "Caller Graph" -Funktion, mit der Sie Dinge in kleinen Kästchen visualisieren können. Auch der Call Stack und die üblichen Uhrenfunktionen sind normalerweise alles, was ich brauche

Eric
quelle
Wo befindet sich Caller Graph in den Visual Studio-Debugger-Tools? Ich kann nur die Anruferhierarchie in Nicht-Debugger-Tools von Visual Studio finden.
Hyunjik Bae
1

Es gibt auch AspectBrowser, der mit Eclipse 3.4.0 nicht sehr gut funktioniert

user23787
quelle
Es funktioniert nicht mit Eclipse 4.x und heute ist 2019 und nicht 2002 ... :-(
fk0
1

Versuchen Sie es mit AQtime . Es ist ein Profiling-Tool, das alle aufgerufenen Funktionen (und die dafür benötigte Zeit) anzeigt. Sie können den Start- und Endpunkt für die Analyse festlegen. Sie haben eine 30-Tage-Testversion.

rec
quelle
Die Anrufdiagramme von AQtime sind manchmal sehr aufschlussreich, selbst wenn Sie glauben, den Code zu kennen.
bk1e
1

Ich habe vor einiger Zeit Borland Together verwendet und es hat gute Arbeit geleistet, Modelle aus Code zu generieren. Ich glaube, es werden sogar Sequenzdiagramme aus Code generiert. Denken Sie daran, wenn Ihr Code ein Chaos ist, wird auch Ihr Modell sein. Und wie ich mich erinnere, ist es nicht billig, aber manchmal kann man ein besonderes fangen.

Craig Tyler
quelle
1

Rational Quantify präsentiert auch ein schönes Anrufdiagramm.

QBziZ
quelle
0

Doxygen, das Gute daran ist, dass es Sie wissen lässt, dass Ihr Code in Bezug auf die zyklische Abhängigkeit von Klassen hässlich / gut ist. Sie werden also gezwungen sein, Ihren Code neu zu faktorisieren, obwohl es Ihnen vielleicht nicht gefällt :-)

Rptony
quelle
0

Slickedit eignet sich hervorragend zum Navigieren in großen Codeblöcken, die Sie nicht kennen. Mit der Tags-Funktion können Sie den Code auf funktionaler Basis bearbeiten, ohne sich mit der Datei befassen zu müssen, in der er sich befindet. (EMACS verfügt tatsächlich über Tags und ist genauso gut wie Slickedit, jedoch mit einer etwas steileren Lernkurve.)

Wenn Sie zu einer Methode, Klasse oder Variablen gelangen, die Sie nicht verstehen, drücken Sie einfach ein Push-Tag, um zu diesem Code zu gelangen, ihn zu überprüfen und dann ein Pop-Tag zurückzugeben. (Diese sind an Tastenanschläge gebunden, daher ist es sehr schnell)

Sie können auch Find-Referenzen verwenden, um zu sehen, wo diese Funktion / Variable verwendet wird.

Spart viel Zeit, wenn Sie herausfinden müssen, in welcher Datei sich etwas befindet.

Bootscodierer
quelle
0

doxygen ist ein kostenloses Tool zum Generieren von Dokumenten (ähnlich wie Javadoc), mit dem auch Beziehungsdiagramme erstellt werden.

Luke
quelle