Forum: Compiler & IDEs Visualisierung v. C Code/Datenstrukturen / nützliche Tools f. C


von Mirco G. (mirco432)


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

von schotter (Gast)


Lesenswert?

doxygen

von dunno.. (Gast)


Lesenswert?

Sowas macht man nicht im nachhinein...

Ansonsten ist doxygen zusammen mit dot eine Möglichkeit, aber 
automagisch geht da auch nicht viel..

von Mirco G. (mirco432)


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!

von Dirk B. (dirkb2)


Lesenswert?

Probier doch mal Doxygen.

Dot solltest du auch installieren.
Damit gibt es Call und Caller Grafen.

Das gibt erstmal einen Überblick.

von Walter T. (nicolas)


Lesenswert?

Dirk B. schrieb:
> Dot solltest du auch installieren.
> Damit gibt es Call und Caller Grafen.

Funktioniert das auch bei nacktem C, oder ist das auf C++ beschränkt?

von Dirk B. (dirkb2)


Lesenswert?

Das geht auch mit C (und noch ein paar anderen, ähnlichen Sprachen)

Man kann auch einen Filter schreiben, mit denen man andere Sprachen in 
etwas C-Ähnliches umwandelt.

von Mirco G. (mirco432)


Lesenswert?

Mit dot meint ihr GraphViz oder?

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

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



Vielen Dank!!!!!

: Bearbeitet durch User
von Walter T. (nicolas)


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.

von Dirk B. (dirkb2)


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.

: Bearbeitet durch User
von GEKU (Gast)


Lesenswert?

Ich würde einmal nach "struktogramm generator" googeln.

von GEKU (Gast)


Lesenswert?

GEKU schrieb:
> struktogramm generator"

https://www.heise.de/download/product/structorizer-57868

Es gibt Struktogramm Generatoren, die C-Code importieren und exportieren 
können.

Im Tool selbst können Blöcke editiert, dubliziert, verschoben und 
gelöscht werden.

Ein gutes, aber teures Tool war EasyCase.

von GEKU (Gast)


Lesenswert?

GEKU schrieb:
> EasyCase

zum Kennenlernen,  ohne Speichermöglichkeit:

http://www.easycode.de/download/software/

von dunno.. (Gast)


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.

von Walter T. (nicolas)


Angehängte Dateien:

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.

von Vincent H. (vinci)


Lesenswert?

https://www.sourcetrail.com/

Sourcetrail ist definitiv das "goto" Tool für sowas. Aber bitte beachten 
dass die komerzielle Nutzung nicht für lau is...

von Bernd K. (prof7bit)


Lesenswert?

Walter T. schrieb:
> 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.

Das aus Deinem Bild (absolute Pfade) hab ich bei Doxygen noch nie 
beobachtet. Sehr erstaunlich.

von Dirk B. (dirkb2)


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.

von Werner (Gast)


Lesenswert?

Wenn's was kosten darf: https://www.sourceinsight.com/

Fand ich immer sehr hilfreich, wenn man sich in fremden Quelltext 
zurecht finden muss.

von Rolf M. (rmagnus)


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.

von Walter T. (nicolas)


Lesenswert?

Dirk B. schrieb:
> Aus der Doku zu Doxygen:
>
> FULL_PATH_NAMES

Danke! Wer diese Option auch sucht: Befindet sich in der GUI bei den 
"Expert Settings" unter "Project".

von Dirk B. (dirkb2)


Lesenswert?

Walter T. schrieb:
> Danke! Wer diese Option auch sucht: Befindet sich in der GUI bei den
> "Expert Settings" unter "Project".

Man kann das auch mit einem Editor in der Config-Datei ändern.

Die Option habe ich gefunden, indem ich auf der Doxygen-Webseite, bei 
der Dokumentation der Config-Datei, nach PATH gesucht habe.

von Mirco G. (mirco432)


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 :).

von GEKU (Gast)


Lesenswert?

Mirco G. schrieb:
> Easy Code teste ich die Woche mal :).

Bin gespannt auf die Beurteilung.

von Walter T. (nicolas)


Lesenswert?

Ich bin gerade angenehm überrascht, wie niedrig die Einstiegshürde für 
Doxygen mithilte der GUI ist. Ich werde zwar nicht meine Doku auf 
Doxygen umstellen, aber es ist schön, ein weiteres Werkzeug in der 
Werkzeugskiste zu haben.

Danke für diesen Thread!

von Mirco G. (mirco432)


Angehängte Dateien:

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?

von Mirco G. (mirco432)


Angehängte Dateien:

Lesenswert?

Daran wird es vermutlich liegen :D.... Aber wie fixe ich das ? :D

von Dirk B. (dirkb2)


Lesenswert?

Den Internet Explorer habe ich für Doxygen nie gebraucht.

Vermutung: DOT ist nicht richtig installiert oder der Pfad dahin ist 
falsch angegeben

Leider sieht man zwar viel Fehler, aber keinen vollständig.

von Dirk B. (dirkb2)


Lesenswert?

Walter T. schrieb:
> Ich bin gerade angenehm überrascht, wie niedrig die Einstiegshürde
> für
> Doxygen mithilte der GUI ist.

Man bekommt, auch bei undokumentierten Code, einen schnellen Überblick.
Und durch die Verlinkung kommt man schnell an den jeweiligen Code.

von Mirco G. (mirco432)


Lesenswert?

Habs hinbekommen alles genau so machen wie Ihmchen! :D

https://www.youtube.com/watch?v=88THCy1vaUk&t=242s

von Mark B. (markbrandis)


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?

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Klassen oder structs, die nicht nur elementare Typen enthalten.
z.B. structs oder typedef

von Mark B. (markbrandis)


Lesenswert?

Dirk B. schrieb:
> Klassen oder structs, die nicht nur elementare Typen enthalten.
> z.B. structs oder typedef

Ja, und was genau soll das bringen diese grafisch darzustellen? Gibt es 
irgendein sinnvolles Beispiel dafür - eine Grafik, die beim Betrachten 
dem Leser Informationen vermittelt, die er anders nicht oder nur 
deutlich schwerer hätte erhalten können?

: Bearbeitet durch User
von Walter T. (nicolas)


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.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

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

von mh (Gast)


Lesenswert?

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?

von Bernd K. (prof7bit)


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.

von Mark B. (markbrandis)


Lesenswert?

Bernd K. schrieb:
> 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.

In der IDE den Mauszeiger druff. Information wird angezeigt. Fertig. :-)

von mh (Gast)


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?

von Heiko L. (zer0)


Lesenswert?

Mirco G. schrieb:
> Sowas muss es doch geben oder?

Sehr interessant für solche Sachen klingt https://www.kythe.io/
Es braucht aber bestimmt ein wenig Arbeitseinsatz da zu etwas 
brauchbarem zu kommen.

von Bernd K. (prof7bit)


Lesenswert?

mh schrieb:
> Willst du etwa eine Liste, in der rekusiv alles bis auf
> int/char/float/... runtergebrochen wurde?

Ja.

> Welchen Sinn soll das haben?

Das struct in Pascal nachbauen oder in anderen Sprachen für die es 
zufällig kein Binding gibt.

von S. R. (svenska)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.