2010-10-13 5 views
16

Ich benutze Ubuntu 10.04 und studiere die Programmierung von Kernel-Objekten.Wie visualisiert man ein Diagramm von C-Strukturen, die zueinander gehören/zeigen?

Ich bin auf einige ziemlich komplizierte Strukturen gestoßen, die ich schwer zu lesen habe, also dachte ich, ich würde versuchen, ein Werkzeug zu finden, das mir helfen kann, sie zu visualisieren.

Das Einzige, was ich bisher finden konnte, ist VCG, die eine C Struct Visualization Example hat, die wie folgt aussieht:

, die wie etwas aussieht ich verwenden möchten.

Die erste Sache ist, dass das letzte VCG für Ubuntu verpackt vcg (1.30debian-6) in hardy ist - aber das .deb-Paket kann in Ubuntu Lucid ohne Probleme heruntergeladen und installiert werden.

Allerdings scheint dieses Paket nur ein VCG Zuschauer (ähnlich wie vcgviewer, würde ich raten). Die vcgviewer Seite Anmerkungen:

To generate compiler graph data with newest gcc compilers use: 
gcc -g -da -dv -fdump-tree-original-raw -fdump-tree-all-all 

Also, anscheinend würde ich diese Schalter zusammen mit gcc verwenden, um beim Kompilieren, .vcg Graph-Dateien aus der C-Quelle zu erzeugen.

Das Problem ist jedoch, dass ich ein Kernel-Modul baue, das nur auf die Linux-Header verweist - da ich versuche, so viel wie möglich die Neukompilierung des gesamten Kernels zu vermeiden. Und es scheint, sobald ich versuche, -fdump-tree-... Schalter in diesem Kontext zu verwenden (Kernel-Modul), gcc möchte mit dem Kompilieren des Rests des Kernels auch beginnen! (und offensichtlich versagt, sowohl in der Zusammenstellung und die Erzeugung von .vcg Graphen - wie ich die Kernelquellen nicht haben, headers nur)

Also meine Frage ist - ist es ein Werkzeug, das wäre produzieren .vcg- oder .dot-Graphen von Strukturen - einfach eine einfache Text-Header-Datei als Eingabe verwenden? (es würde alle Abhängigkeiten nicht auflösen müssen - einfach diejenigen, die in Header-Dateien in demselben Verzeichnis)

EDIT: es ist eigentlich nicht so wichtig für mich, dass das Backend ist .vcg oder .dot insbesondere erwähnte ich sie nur weil ich sie bisher gefunden habe; jede Art von Software, die ähnliche Struktur Visualisierung, unabhängig von Backend ermöglichen würde, ist willkommen :)

PS: Beachten Sie, dass VCG Zuschauer zum Betrachten .vcg Graphen nicht verwenden möchten, können Sie die .vcg konvertieren Format in ein .dot-Format und verwenden Sie stattdessen graphviz für die Visualisierung. Was für mich funktionierte, ist graph-easy - search.cpan.org für - das zuerst in Ubuntu mit Maverick Edition gepackt wurde, wie libgraph-easy-perl () aber die .deb-Datei kann - wieder - heruntergeladen und ohne Probleme installiert werden in Lucid). libgraph-easy-perl installiert einen graph-easy Skript, das dann wie Dinge zu tun erlaubt:

graph-easy test.vcg --as_dot | dot -Tpng -o test.vcg.png 

Siehe auch „[graphviz-interest] VCG files“ und „Diego Novillo - Re: can't find VCG viewer“ für eine anderen VcG-zu-Punkt-Skript (, die leider nicht für mich arbeiten).

Antwort

4

Ich habe gute Erfahrungen mit doxygen für diese Aufgabe gemacht. Es wurde entwickelt, um Dokumentation aus annotierten Quelldateien zu erstellen, aber es kann Ihnen bereits viele Dinge ohne die Anmerkungen geben, einschließlich verschiedener Graphen. Doxygen verwendet Punkt für die Graphenerstellung.

+0

Hallo Bart, vielen Dank für Ihre Antwort! Diese SO-Seite: [Open-Source-Tool zur Visualisierung von C/C++ - Header-Datei-Abhängigkeiten? - Stack Overflow] (http://stackoverflow.com/questions/1190597/open-source-tool-to-visualize-cc-header-file-dependencies) hat eine nette, schnelle Einleitung zu doxygen - aber es scheint, dass es erfordert etwas rummachen :) Auch meine Frage bearbeitet, so ist klar, dass ich nicht unbedingt 'dot' oder ein bestimmtes Backend benötige; Jede Möglichkeit, Strukturen basierend auf Quelldateien zu visualisieren, würde ausreichen. Prost! – sdaau

+0

@sdaau: Leistungsfähige Tools benötigen immer etwas Arbeit, damit sie genau das tun, was Sie wollen, vor allem, wenn es nicht die Standardanwendung ist, für die sie entwickelt wurden. Doxygen verwendet dot intern, aber seine Ausgabe sind direkt sichtbare Bilddateien. –

+0

Hi Bart - nur um zu erwähnen: Ich stimme völlig zu: brauche etwas Arbeit! Ich war nur herumwandern, wenn es Alternativen gibt, die möglicherweise besser für die Aufgabe geeignet sind :) ... Danke für den Kommentar - Prost! – sdaau

2

Ich habe es geschafft, erfolgreich ein Kernel-Modul mit vcg Generation aufzubauen, indem Sie folgendermaßen vorgehen:

  1. eine verknüpfte Kopie der Kernel-Quelle oder Header-Verzeichnis erstellen mit cp -al /usr/src/linux-srcdir /tmp/tmp-srcdir da gcc will zum aktuellen Arbeits schreiben Verzeichnis.
  2. Hinzufügen von EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all" zur make-Befehlszeile z. -C /tmp/tmp-srcdir M= pwd EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all". Die vcg Dateien werden in /tmp/tmp-srcdir generiert
+0

Hallo Hasturkun, danke für deinen Kommentar! Leider sieht es so aus, als ob diese Prozedur vollständige Kernel-Quellen benötigt - nur Header reichen nicht aus. Erstens, ich habe beide "linux-headers-2.6.32-25" und "linux-headers-2.6.32-25-generic"; Wenn Sie 'cp -al' auf' generic' machen, wird make mit 'Makefile: No this file file or directory' fehlschlagen. Mit den kopierten Plain-Headern habe ich zuerst 'ERROR: Kernel configuration is invalid ... Run 'make oldconfig && make prepare' auf Kernel src, um es zu beheben. '. Für mich wurde 'make oldconfig' übergeben, aber' make prepare' wurde mit 'No rule to make target' kernel/bounds.c' versehen. – sdaau