Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
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

Med SOURCE_BROWSER + INLINE_SOURCES får jeg kildekoden direkte ind i dokumentationen - 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. Kør doxygen for at lave HTML output svarende til dette. I kan se flere eksempler på brugen af doxygen på denne URL.

/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

Microsoft-dansker gør C#-udviklere klogere med nyt kodeværktøj

Udgivet 23. maj 16.03Opdateret 24. maj 16.08

Rygte: Microsoft lancerer Office til iOS i november

Udgivet 24. maj 15.33Opdateret 24. maj 15.33

Yahoos nye browser får uheldig start - lækker eget sikkerhedscertifikat

Udgivet 24. maj 14.52Opdateret 24. maj 14.53

Danske internetudbydere nægter at blokere 12 pokersites

Udgivet 24. maj 13.58Opdateret 24. maj 13.58

Dokumentation: Her er Spillemyndighedens krav - og 12 ulovlige pokersider

Udgivet 24. maj 13.58Opdateret 24. maj 15.49

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Seneste debat

  1. Meego-afløseren Tizen klar til at tage kampen op med Android

    12 comments.
    Last update 36 minutter 14 sekunder
    Skrevet af Jacob Sparre Andersen
  2. Kynisk it-guru: »Internettet er basalt set noget lort«

    7 comments.
    Last update 43 minutter 17 sekunder
    Skrevet af Poul-Henning Kamp
  3. Oracle tabte, vandt Google Java ?

    16 comments.
    Last update 53 minutter 15 sekunder
    Skrevet af Poul-Henning Kamp
  4. Yahoos nye browser får uheldig start - lækker eget sikkerhedscertifikat

    1 comment.
    Last update 1 time 4 minutter
    Skrevet af Thue Kristensen
  5. Danske internetudbydere nægter at blokere 12 pokersites

    3 comments.
    Last update 1 time 10 minutter
    Skrevet af Jesper Lund Stocholm
  6. Dokumentation: Her er Spillemyndighedens krav - og 12 ulovlige pokersider

    3 comments.
    Last update 1 time 12 minutter
    Skrevet af Jens Larsen
  7. GOTO - programming with the stars (F#)

    9 comments.
    Last update 1 time 13 minutter
    Skrevet af Baldur Norddahl
  8. ESA arbejder på interplanetarisk internet

    5 comments.
    Last update 1 time 18 minutter
    Skrevet af Jarle Knudsen

Mere debat »

It-virksomheder

Ciklum
|
Reload!
|
IBM Danmark
|
D60
|
Clockwork Consulting ApS
|
REALTECH NORDIC ApS
|
Visma Sirius A/S
|
Planahead
|
Netcompany
|
Aalborg Data
|
NNIT
|
Byggeweb
 

Information

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

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Download Windows 8
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Mountain 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
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

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