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?
c++
c
code-analysis
Dprado
quelle
quelle
Antworten:
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.
quelle
Die Profiling-Software gibt Ihnen eine Vorstellung davon, welche Funktionen aufgerufen wurden.
Wenn Sie Linux verwenden können, versuchen Sie es mit KCachegrind
quelle
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.
quelle
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 .
quelle
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
Doxygen gibt Ihnen Klassenbeziehungsdiagramme, wenn Sie graphviz verwenden, auch wenn Sie sich nicht speziell darauf vorbereitet haben.
quelle
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.
quelle
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
quelle
Es gibt auch AspectBrowser, der mit Eclipse 3.4.0 nicht sehr gut funktioniert
quelle
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.
quelle
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.
quelle
Rational Quantify präsentiert auch ein schönes Anrufdiagramm.
quelle
Ich habe ein Tool namens Visustin ausprobiert, das grafisch nicht sehr gut ist, aber das tut, was es sagt: Flussdiagramm aus Code. http://www.aivosto.com/visustin.html
quelle
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 :-)
quelle
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.
quelle
doxygen ist ein kostenloses Tool zum Generieren von Dokumenten (ähnlich wie Javadoc), mit dem auch Beziehungsdiagramme erstellt werden.
quelle