Einarbeitung in fremde C++-Programme
-
Naja, ich habe mich bis jetzt immer so in Programme eingearbeitet indem ich mir angesehen habe wie genau das funktioniert was ich ändern sollte. Den "erstmal einarbeiten damit man sich später auskennt" Fall hatte ich noch nicht.
Guck dir einfach das Programm durch ... ich fange meist bei irgendeiner High Level Funktion an von der ich weiss was sie tut, und gucke dann wie sie es tut, also welche anderen Funktionen/Klassen wo vorkommen, was die tun etc.
Solche High Level Funktionen deren Aufgabe man einfach "wissen" kann findet man normalerweise recht schnell, z.B. indem man main() durchgeht, bzw. bei GUI Programmen eben die diversen Message Handler die aufgerufen werden nachdem man auf nen Button gedrückt hat.Und 10000 LOC ist nicht wirklich so viel - wenn du etwas Glück hast, dann sind 70% davon sowieso Utility- und Glue-Code ohne besonders anspruchsvolle Logik.
-
Ein Feature wurde von einem anderen programmiert. Jetzt muss es in Simulator integriert werden. Meine Aufgabe ist es zu erkennen, was genau im Simulator geändert werden soll.
Ich möchte erstmal eine Liste von den nötigen Änderungen erstellen und dann anfangen.Hier eine kleine Zusammenfassung der Vorschläge:
1- Von main() aus die Aufrufpfade verfolgen
2- Bei GUI Programmen die diversen Message HAndler die aufgerufen werden, nachdem man auf einen Button gedrückt hat
3- Klassendiagramm erzeugen, um eine Übersicht zu schaffen
4- Debugger + singlestep
5- Sich von einem Profiler einen Call-Graphen erstellen lassenWobei ich ehrlich gesagt bei 4 und 5 noch nicht genau weiss, wie man vorgeht.
-
cpplinux schrieb:
Wobei ich ehrlich gesagt bei 4 und 5 noch nicht genau weiss, wie man vorgeht.
Zu 4: Setz an der Stelle im Quellcode die Du dir anschauen möchtest einen Haltepunkt, und schau dir dann mal Schritt für Schritt an wo das Programm "hin springt".
-
Zu 5: spiel dir VTune drauf, starte das Programm unter VTune und lass es ne Zeitlang laufen. Dann guck dir den generierten Callgraphen an. Vorteil dabei: du siehst welche Funktion welche anderen Aufruft, bzw. auch in der anderen Richtung (von wem wird XYZ aufgerufen?), und pro Edge auch noch wie oft der Aufruf A->B stattgefunden hat.
-
Hallo,
funktioniert das Vtune auch unter Eclipse/ Linux?
-
Nicht dass ich wüsste, aber es wird wohl ähnliche Tools geben, die ähnlich zu verwenden sind.
War als Beispiel gedacht.
-
cpplinux schrieb:
Hallo,
funktioniert das Vtune auch unter Eclipse/ Linux?
http://www.intel.com/cd/software/products/asmo-na/eng/239145.htm
-
Ich habe VTune zwar nie benutzt, doch es scheint das gleiche Ziel zu haben
wie kcachegrind (http://kcachegrind.sourceforge.net/cgi-bin/show.cgi)kcachegrind stellt die Ausgaben von callgrind, was wiederum zu valgrind (http://valgrind.org) gehört, grafisch dar.
Nachdem valgrind und kcachegrind installiert sind erstelle das Programm mit debugging Symbolen(so erkennt kcachegrind z.B. wo die quellen liegen).
Dann...$ mkdir mein_analyse_ordner && cd mein_analyse_ordner $ valgrind --tool=callgrind /Pfad/zum/Programm Argumente .... jede Menge Ausgaben und eine Datei cachegrind.out.xxx ... $ kcachegrindDie Dokumentation ist teilweise veraltet und irreführend, aber es ist ein super Werkzeug.
MfG Maik
-
ich empfehle: http://www.scitools.com/products/understand/cpp/product.php
es gibt 'ne kostenlose 30 tage testversion davon

-
pale dog schrieb:
ich empfehle: http://www.scitools.com/products/understand/cpp/product.php
es gibt 'ne kostenlose 30 tage testversion davon

kann ich auch empfehlen !
gibt ein ähnliches tool von redhat, kostet nichts,ist aber unübersichtlicher.
heisst sourcenavigator