Visualisierung v. C Code/Datenstrukturen / nützliche Tools f. C

OP #5840326
Lesenswert?

Guten Tag,

ich bin habe jetzt schon mehrere kleine Projekte mit C hinter mir.

Jetzt habe ich aber ein ziemlich großes Projekt bekommen und der 
bestehende Code überfordert mich ehrlich gesagt ein wenig.

Vor allem bezüglich der Datenstruktur verliere ich schnell den 
Überblick.

Ich habe jetzt schon ein paar Stunden damit verbracht nach irgendwelchen 
Tools zu suchen die mir, vor allem die Datenstrukturen, visuell 
darstellen.

Leider konnte ich aber nichts brauchbares finden.

Sowas muss es doch geben oder?

Wenn jemand noch andere nützliche Tools f. C hat bitte her damit :).

Ich programmiere mit Atmel Studio 7

Vielen Dank!!!!

Mirco
OP #5840445
Lesenswert?

Ich bin mir bewusst das man das normalerweise nicht im nachhinein macht. 
Zu dem Projekt wurde aber schon was entwickelt vor 5 Jahren oder so. Und 
das wollte ich halt erstmal nachvollziehen.

Deswegen wäre es natürlich auch gut wenn das automatisch funktionieren 
würde :D.

Aber wenn es da nicht viel gibt dann muss ich so klar kommen...

Vielen Dank!
#5841240
Lesenswert?

Mirco G. schrieb:
> Wie habt ihr euch da eingearbeitet? Einfach mit dem Manual?

Sollte Dir bei Deiner Suche das ultimative "Getting Started Guide" 
begegnen, wäre es nett, einen Link hier zu posten. Bislang habe ich um 
Doxygen immer einen Bogen gemacht, weil der Aufwand den Nutzen nicht 
rechtfertigte, aber da kann sich bei einem guten Tutorial schnell ins 
Gegenteil verkehren.
#5841317
Lesenswert?

Mirco G. schrieb:
> Mit dot meint ihr GraphViz oder?

Ja, DOT ist ein Teil davon.

> Wie habt ihr euch da eingearbeitet? Einfach mit dem Manual?

Ja. Und dem Wizard.
Da du den Code (noch) nicht dokumentieren sondern nur analysieren 
willst, brauchst du die Befehle nicht sonder musst die Config-Datei 
richtig einstellen

> Man wendet aber erst Doxygen an und arbeitet die Infos dann  nochmal mit
> GraphViz auf oder?

Doxygen ruft DOT automatisch auf, erzuegt die Grafiken und bindet sie 
auch ins HTML mit ein.
Du musst in der Config-Datei/Wizard den Pfad angeben und "Have DOT" 
(oder so ähnlich) aktivieren.

Spiel ruhig erstmal mal mit einem kleinen Projekt rum, bis du 
vernünftige Einstellungen gefunden hast.
Gast #5841603
Lesenswert?

Doxygen ist eigentlich garnich soo wild.

Zumindest wenn man nur die graphen haben will, und ein bisschen 
übersicht, hat man schnell was erzeugt.

Es gibt da dieses gui und nen ordentliches wiki, das geht schon.

Wirklich sinnvolles kommt aber erst rum wenn man die kommentare im code 
entsprechend  formatiert und taggt. Fleissarbeit.
#5841876
Lesenswert?

dunno.. schrieb:
> Es gibt da dieses gui und nen ordentliches wiki, das geht schon.

Tatsache. Mit der GUI geht das fast geschmeidig. GraphViz will separat 
installiert werden und der Pfad muß manuell in Windows hinterlegt 
werden, aber das Ergebnis ist nicht übel.


Was ich leider nicht finde, ist eine Möglichkeit, die Pfade von absolut 
auf relativ umzustellen. So sind die Felder der Include-Graphen riesig 
und redundant.
Angehängte Dateien:
#5841946
Lesenswert?

Aus der Doku zu Doxygen:

FULL_PATH_NAMES

    If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the 
full path before files name in the file list and in the header files. If 
set to NO the shortest path that makes the file name unique will be used

    The default value is: YES.
#5842170
Lesenswert?

Wenn ich einen Überblick über bestehenden Code haben will, nehme ich 
auch Doxygen. Ich erzeuge mir ein Doxyfile mit doxygen -g, dann gehe ich 
durch das (sehr gut dokumentierte) File durch und schalte alles ein, was 
geht (außer den ganzen verschiedenen Output-Formaten). Und damit 
generiere ich dann die Doku.
OP #5842512
Lesenswert?

Vielen Dank für eure Beiträge!

Ich hab es jetzt schlussendlich per Hand mit Mindjet gemacht. Da habe 
ich auch ne ganz gute Struktur reinbekommen.

Im nachhinein Doxygen machen würde glaube ich wenig sinn machen. Ich 
werde es aber zur Dokumentation auf jeden Fall verwenden wenn ich den 
neuen Code schreibe. Der Aufwand dürfte sich lohnen :).

https://www.sourcetrail.com/ habe ich getestet. Ist aber total 
umständlich. Ich war nicht im Stande das Atmel Studio projekt damit zu 
öffnen.

Easy Code teste ich die Woche mal :).
OP #5844085
Lesenswert?

Ich habe jetzt mal mit Doxygen angefangen :). Alles so gemacht wie der 
Heini es sagt:

https://www.youtube.com/watch?v=-V_vHZPOZfY&t=300s

Internet Explorer installiert und unter Einstellungen ActiveX jeglichen 
zugriff erlaubt (Damit arbeitet das Prog ja irgendwie... meint der Typ 
im Video zumindest).

Danach zeigt er mir im Internetexplorer an das die aktuellen 
einstellungen ein Sicherheitsrisiko darstellen. Ich weiß aber nicht ob 
er es trd zulässt oder nicht.

Wie man im Bild aber sieht werden mir anscheinend die Graphen nicht 
richtig angezeigt.

Wenn ich Rechtsklick=> Eigenschaft auf das Kreuz mache und in der URL 
nach dem Bild ___u____coll___graph.png suche finde ich das aber auch 
nicht ...

jemand ne Idee?
Angehängte Dateien:
#5844133
Lesenswert?

Mirco G. schrieb:
> Ich habe jetzt schon ein paar Stunden damit verbracht nach irgendwelchen
> Tools zu suchen die mir, vor allem die Datenstrukturen, visuell
> darstellen.

Welchen Sinn soll es haben, eine Datenstruktur grafisch darzustellen? 
Und wie stellt man Deiner Meinung nach elementare Datentypen (aus denen 
die Datenstrukturen ja zusammengesetzt sind) visuell dar?

Ich vermute mal, es geht eher um sowas wie die Hierachie der 
Funktionsaufrufe?
#5844454
Lesenswert?

Ich finde es schon ganz nützlich, eine Übersicht über alle definierten 
Structs und Enums zu haben, und direkt dabei, in welchem Header sie 
definiert wurden.

Ersteres bietet zwar auch meine IDE, aber das ist eher eine Unübersicht, 
da diese Ansicht mit anonymen Structs, die sich nicht ausblenden lassen, 
zugemüllt ist.
#5845121
Lesenswert?

mh schrieb:
> Bernd K. schrieb:
>> Mark B. schrieb:
>>> dem Leser Informationen vermittelt, die er anders nicht oder nur
>>> deutlich schwerer hätte erhalten können?
>>
>> Erklär mal kurz wie dieses struct im Speicher aussieht:
>> https://github.com/python/cpython/blob/master/Include/moduleobject.h#L75
>
> So wie es da Deklariert ist? Was genau willst du wissen und warum?

Ja und wie ist es nun deklariert? "Da" ist schon mal nur ein kleiner 
Teil davon deklariert, der Rest in anderen Headern. Ich will alle Felder 
wissen und die Länge. Sag an! Grund ist erstmal zweitrangig.
Gast #5845207
Lesenswert?

Bernd K. schrieb:
> mh schrieb:
>> Bernd K. schrieb:
>>> Mark B. schrieb:
>>>> dem Leser Informationen vermittelt, die er anders nicht oder nur
>>>> deutlich schwerer hätte erhalten können?
>>>
>>> Erklär mal kurz wie dieses struct im Speicher aussieht:
>>> https://github.com/python/cpython/blob/master/Include/moduleobject.h#L75
>>
>> So wie es da Deklariert ist? Was genau willst du wissen und warum?
>
> Ja und wie ist es nun deklariert? "Da" ist schon mal nur ein kleiner
> Teil davon deklariert, der Rest in anderen Headern. Ich will alle Felder
> wissen und die Länge. Sag an! Grund ist erstmal zweitrangig.

Ich beziehe mich auf die Deklaration von PyModuleDef in Zeile 75 der 
modulobject.h, auf die dein Link zeigt.

Willst du etwa eine Liste, in der rekusiv alles bis auf 
int/char/float/... runtergebrochen wurde? Welchen Sinn soll das haben? 
Und was meinst du mit Länge? Die Größe der Struktur? Warum ist die 
relevant?
#5845296
Lesenswert?

Mark B. schrieb:
> Welchen Sinn soll es haben, eine Datenstruktur grafisch darzustellen?

Je nach Komplexität der Datenstruktur bekommt man eine Übersicht.

Eine einfache struct aus primitiven Typen braucht man nicht... aber eine 
struct, die aus zwanzig anderen structs besteht, die ihrerseits wieder 
structs enthält, bis man irgendwo auf die eigentlichen Daten trifft, ist 
manchmal echt nützlich.

Nicht jeder Code ist sauber oder übersichtlich geschrieben. Mancher ist 
sogar große Grütze gefüllt mit Legacy-Scheiße.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren