Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Emner
  • Opret bruger
  • Log ind
Se kommentarer (9)
Emner Udviklingsværktøjer, Open source, Unix

Kode-værkstedet 1: Doxygen

Af Peter Toft 26. november 2008 kl. 08:00

Over de sidste mange uger har jeg haft ALT for meget arbejde. En stor del af dette har været fokuseret på en stor bunke C/C++ kode, hvor jeg har arbejdet med en del forskellige SW-væktøjer, som jeg har haft stor glæde af. Disse vil jeg gerne præsentere i dette og de kommende blog-indlæg. Læs også denne tidligere blog-post.

Hvis vi nu prikker lidt til PHK, så kan det være han kan lokkes til at skrive mere om hans "darling" blandt Lint-produkter (statisk kodeanalyse) - FlexeLint ![Eksternt billede](http://www.version2.dk/uploads/smil3dbd4d6422f04.gif" alt=")

I dette første indlæg ser jeg nærmere på Doxygen, som er et fantastisk værktøj til at give overblik over C/C++/Java/VHDL og meget andet. Ideen er at man skriver lidt struktureret dokumentation i sin kode løbende, og derefter anvender doxygen til at give HTML, LaTeX, eller RTF dokumentation af koden med funktionsbeskrivelser, funktions-kaldetræer og meget andet. Jeg viser lidt af dette med et eksempel, som kan findes på min web-server: http://petertoft.dk/v2/doxygen/

I C-eksemplet har jeg i modsætning til min "rigtige kode" kun fire filer, som kan ses på files.html siden. Min main()-funktion kalder et par underfunktioner, der (typisk) hver kalder et par andre underfunktioner. Man kan sætte sig og tegne funktions-hierarkiet manuelt, men det er (bl.a.) her doxygen virkelig er guld værd. Jeg starter med at installe doxygen og graphviz pakkerne på min Linux-maskine.

Jeg har været doven og anvendt den grafisk front-end til doxygen, dvs. doxywizard:

](http://www.version2.dk/modules/xphoto/cache/70/3070_775_775.png)

Her kan man komme langt alene med wizard knappen, men der er et par fine muligheder under "Expert" jeg har sat til.

  • Source browser: SOURCE_BROWSER + INLINE_SOURCES
  • Dot: CALL_GRAPH + CALLER_GRAPH

<br/>

Med SOURCE_BROWSER + INLINE_SOURCES får jeg kildekoden [direkte ind i dokumentationen](http://petertoft.dk/v2/doxygen/code2_8c-source.html) - rigtig fint.

Med Dot: CALL_GRAPH og CALLER_GRAPH får jeg funktions-afhængighedsgrafer såsom denne lavet automagisk. RIGTIG rart!

![Eksternt billede](http://petertoft.dk/v2/doxygen/main_8c_840291bc02cba5474a4cb46a9b9566fe_..." alt="doxygen)

Bemærk at man kan klikke på HTML sidernes billeder og hoppe rundt mellem funktionerne. Det er godt lavet.

Og for alle funktioner genereres endda med min opsætning diagrammer af hvilken funktion, der kalder f.eks. fct4() - nemlig fct3() og fct_local().

![Eksternt billede](http://petertoft.dk/v2/doxygen/code2_8c_365a973b71a4cd3e24682a61c1ac0210..." alt="doxygen)

I er meget velkomne til at skrive om andre features ved doxygen. Bl.a. har jeg ikke gjort så meget ud af de glimrende muligheder, der er i doxygen for at dokumentere, men nærmere fokuseret på at få overblik over koden.

I kan hente mit kode-eksempel fra [denne URL](http://petertoft.dk/v2/version2_9173.zip). Kør doxygen for at lave HTML output svarende til [dette](http://petertoft.dk/v2/doxygen/). I kan se flere eksempler på brugen af doxygen på [denne URL](http://www.stack.nl/~dimitri/doxygen/results.html).

/pto

Send Tweet
Udskriv
Billede af Peter ToftOm Peter Toft

Peter Toft er senior specialist hos Renesas Mobile og har blogget om open source og Linux siden Version2's begyndelse. Blogger også jævnligt om andre sjove teknologi-områder.

Follow @petertoft

Kommentarer (9)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Jens Dalsgaard Nielsen 26. nov. 2008 - 09.11
 
:-) Doxygen :-)

Doxygen er suverænt.
Også hvis man har "gamle" udokumenterede programmer.

Det er muligt at indlejre kommentarer, dokumentation osv osv

Hvis folk vil lade være med at flame mig pga skod kode så prøv at kigge på http://www.control.aau.dk/~jdn/doxygen/html/

Bla er pakken mscgen til selens diagrammer ret smart/enkel.

\msc

hscale = "0.4";

a,b,c;

a->b [ label = "ar_fct", URL="\ref ar_fct" ] ;
b->c [ label = "bc(TRUE)"];
c=>c [ label = "process(1)" ];
c=>c [ label = "process(2)" ];
...;
c=>c [ label = "process(n)" ];
c=>c [ label = "process(END)" ];
a<<=c [ label = "callback()"];
--- [ label = "If more to run", ID="*" ];
a->a [ label = "next()"];
a->c [ label = "ac1()\nac2()"];
b<-c [ label = "cb(TRUE)"];
b->b [ label = "stalled(...)"];
a<-b [ label = "ab() = FALSE"];

\endmsc

once more

\msc
Sender,Receiver;
Sender->Receiver [label="Command()", URL="\ref Receiver::Command()"];
Sender<-Receiver [label="Ack()", URL="\ref Ack()", ID="1"];
\endmsc

laver de "flotte " diagrammer på forsiden.

/J

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Peter Tofts billede
Peter Toft 26. nov. 2008 - 10.16
 
Re: :-) Doxygen :-)

Fedt - tak for eksemplet Jens

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Kristian Thy 26. nov. 2008 - 11.54
 
Opdateret dokumentation

Noget jeg selv synes er snedigt er at lægge et kald til Doxygen ind i et post-commit hook i Subversion. På den måde har man altid opdateret dokumentationen til at afspejle den seneste version af koden.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 26. nov. 2008 - 15.42
 
mnjae...

Jeg må indrømme at jeg kun sjældent bruger doxygen og de skyldes at jeg mangler ihverfald to-tre dimensioner af koden i det output doxygen genererer.

Men det er da meget praktisk at kunne få en call[er]-graph produceret lidt nemt.

Men det der fis med at sprede en novelle ud over kildeteksten, det tænder jeg fuldstændig af på.

Poul-Henning

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jens Dalsgaard Nielsen 26. nov. 2008 - 15.54
 
Re: mnjae...

Jeg er helt enig med det i at man ikke skal møje kildeteksten til, men man kan samle docu i enkelte filer så man har det samlet og det hele hænger sammen.

Jeg har haft stor glæde at doxygen til at danne mig et overblik over andres kode, selvom det som alt andet jo selvfølgelig og heldigvis ikke er den hellige gral ;-)

Men smag og behag er forskellig - heldigvis :-)

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Peter Tofts billede
Peter Toft 26. nov. 2008 - 18.25
 
Re: mnjae...

Baaaaa - doxygen napper den dokumentation, du alligevel burde lave i din kode.

MVH fra vores blogger møde (god mam)

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jens Dalsgaard Nielsen 26. nov. 2008 - 20.42
 
Re: mnjae...

Det er ikke korrekt - heldigvisd :-)

Groft sagt fortolker doxygen kun kommentarfelter der starter i position 1 med /** eller /*! eller /// for C++

Så en kommentar som

/* hvis der er en bug her saa giver jeg oel */

kommer ikke med

men

/** hvis der er en bug skal I give mgi en oel */

kommer med :-)

Men helt enig det er ikke den hellige gral

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jens Dalsgaard Nielsen 26. nov. 2008 - 20.43
 
Re: mnjae...

å¨åhh den her tingest æder spaces så der burde staa

<space><space><space>/* OEL NU */

kommer ikke med men

/** postevandnutildetoerstige */

kommer med :-)

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
michael rasmussen 26. nov. 2008 - 22.47
 
Tilføj doxygen til auto{conf,header,make}

Hvis man gerne vil have automatiseret dokumentationsprocessen med doxygen, kan man følge denne opskrift:
http://www.bioinf.uni-freiburg.de/~mmann/HowTo/automake.html#doxygenSupport

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

4 gode sikkerhedsråd: Sådan gør du firma-pc'en vinterferieklar

Udgivet 10. feb 8.01Opdateret 10. feb 8.01

Konklusion af Polsag-review fra 2009: Elendig kode hånd i hånd med elendig kontrakt

Udgivet 10. feb 6.59Opdateret 10. feb 6.59

It skal spare kommunerne for 165 millioner kroner i 2012

Udgivet 9. feb 16.02Opdateret 9. feb 16.02

Adobe: Vi laver ikke Flash til Android-udgaven af Chrome

Udgivet 9. feb 15.15Opdateret 9. feb 15.15

Så oldnordisk er politiets it-miljø: Nostalgisk gensyn med 1980’erne

Udgivet 9. feb 14.22Opdateret 9. feb 15.12
Flere it-nyheder »
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Seneste debat

  1. Domæne-forening: Lov om .aarhus og .cph var for tynd

    12 comments.
    Last update 4 minutter 22 sekunder
    Skrevet af Nikolaj Brinch Jørgensen
  2. Opdateret liste over danske iværksættere

    2 comments.
    Last update 4 timer 14 minutter
    Skrevet af Therese Hansen
  3. Stop SOPA, PIPA, ACTA, TPP og alle dem der kommer efter

    50 comments.
    Last update 8 timer 36 minutter
    Skrevet af Bjarne W. B. Petersen
  4. Derfor bliver dårlige it-projekter ikke stoppet i tide

    1 comment.
    Last update 8 timer 59 minutter
    Skrevet af Kasper Jørgensen
  5. Grotesk jobinterview i 2007: »Tag ikke jobbet, vi får alligevel aldrig Polsag til at virke«

    17 comments.
    Last update 9 timer 7 minutter
    Skrevet af Claus Waldersdorff Knudsen
  6. Så oldnordisk er politiets it-miljø: Nostalgisk gensyn med 1980’erne

    6 comments.
    Last update 9 timer 10 minutter
    Skrevet af Simon Justesen
  7. ACTA er i orden!

    51 comments.
    Last update 12 timer 33 minutter
    Skrevet af Jarle Knudsen
  8. It-advokat: Nu går grænsebommene ned over internettet

    10 comments.
    Last update 14 timer 19 minutter
    Skrevet af Niels Elgaard Larsen
Mere debat »

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Digitaliseringsstyrelsen
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Lion
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu 11.10
  • Virtualisering
  • Windows 8
  • Windows Phone 7
  • iOS 5
  • iPhone 4S

Tjenester

  • Android-app
  • iPhone-app
  • RSS-feeds
Følg @version2dk
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Skelbækgade 4 1717 København V
  • Tlf. work 33265300