mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mirco G. (mirco432)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schotter (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
doxygen

Autor: dunno.. (Gast)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Sowas macht man nicht im nachhinein...

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

Autor: Mirco G. (mirco432)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Probier doch mal Doxygen.

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

Das gibt erstmal einen Überblick.

Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mirco G. (mirco432)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde einmal nach "struktogramm generator" googeln.

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> EasyCase

zum Kennenlernen,  ohne Speichermöglichkeit:

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

Autor: dunno.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Walter T. (nicolas)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn's was kosten darf: https://www.sourceinsight.com/

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

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Mirco G. (mirco432)
Datum:

Bewertung
0 lesenswert
nicht 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 :).

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mirco G. schrieb:
> Easy Code teste ich die Woche mal :).

Bin gespannt auf die Beurteilung.

Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mirco G. (mirco432)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Mirco G. (mirco432)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Daran wird es vermutlich liegen :D.... Aber wie fixe ich das ? :D

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
2 lesenswert
nicht 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.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mirco G. (mirco432)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs hinbekommen alles genau so machen wie Ihmchen! :D

Youtube-Video "How to Comment & Document Your Code Using Doxygen and Graphviz"

Autor: Mark B. (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Dirk B. (dirkb2)
Datum:

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

Autor: Mark B. (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Walter T. (nicolas)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark B. (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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. :-)

Autor: mh (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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?

Autor: Heiko L. (zer0)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.