Statický call graf pro C zdrojáky

Statický call graf pro C zdrojáky
« kdy: 02. 08. 2011, 15:17:01 »
Ahoj, potřebuji vygenerovat "call" graf (volání metod) v C zdrojácích, a to tak aby byl

1) statický - nikoliv z profileru ale prostou analýzou zdrojových kódů)

2) globální - tj. strom začínající na "main" a dále se větvící, a nikoliv rozsekaně po jednotlivých metodách jako to dělá např. doxygen (u každé procedury uvádí které metody volá a naopak které metody volají ji)

3) možnost filtrování nepodstatných metod (např. logování, standardní knihovny, malloc/free apod.)

4) výstup klidně může být v textové podobě, nějakou grafickou nadstavbu uvítám ale není to podmínka

Cílem je udělat si lepší představu o zdrojácích, o tom jak moc komplexní a provázané jsou určité větve apod.

Je mi jedno jestli to bude samostatný program nebo např. plugin do Eclipse / Netbeans / ... ale to co jsem našel na netu nesplňuje výše uvedené podmínky (hlavně negenerují celkový strom ale jen pro jednu danou metodu).
« Poslední změna: 02. 08. 2011, 18:27:16 od Petr Krčmář »


Re: statický call graf pro C zdrojáky
« Odpověď #1 kdy: 02. 08. 2011, 15:28:09 »
Když to vygeneruješ tím doxygenem a pak začneš od main(), to Ti nevyhovuje?
Dělal jsem s tím docela dávno, ale to co vygeneroval ten doxygen, byl graf volání a stačilo mi to ...

RDa

Re: statický call graf pro C zdrojáky
« Odpověď #2 kdy: 02. 08. 2011, 15:33:38 »
Si napiste na to skript.. ale s C to bude tezke, kdyz se maji zpracovavat i ifdef harakiri.. takze zaklad bude asi cisty kod.

Ja delal neco podobneho, mozna i uzitecnejsiho (ze to neni jen vizualizace) pro assembler - na mcu mate omezenou pamet a nevite dle zdrojaku do jake hloubky se zaplni zasobnik - takze se vezme binarka, rozeseka na funkce, vytvori call graph, a spocte se nejhloubejsi zanoreni. rekurze nelze podporovat (je treba preprogramovat na jine konstrukce, a taky nemaji co na mcu hledat) a pak jsem vyresil i volani pres promennou - vyctem moznych funkci pro dane misto (je to jen nekolik malo veci, napr. fonty volaji ruzne funkce na kresleni). Take se spoctou vsechny interrupty - Vysledkem je pak cislo, jez znaci nejvetsi pouziti zasobniku - ten se pak da definovat presneji a vice zustane na malloc. A aplikace jsou stabilnejsi.. duvod k tomu byl totiz ten ze stack a heap si navzajem konkurovali a nebyla urcena presna hranice.

Byla to prace na jedno odpoledne, vas skript bude zrejme jednodussi, grep a zformatovat do graphwizu.

Logik

  • *****
  • 854
    • Zobrazit profil
    • E-mail
Re: statický call graf pro C zdrojáky
« Odpověď #3 kdy: 02. 08. 2011, 15:43:17 »
Pro odstranění ifdef harakiry není nic snažšího, než prohnat zdrojáky preprocesorem.

backup

Re: statický call graf pro C zdrojáky
« Odpověď #4 kdy: 02. 08. 2011, 16:03:55 »
cflow


Ivan

Re: statický call graf pro C zdrojáky
« Odpověď #5 kdy: 02. 08. 2011, 16:13:02 »
hledejte "gcc plugin callgraph". vypagne vam egypt a dalsi. dehydra to myslim neumi. melt je kanon na vrabce. snad existuje neco mezi tim.


Re: statický call graf pro C zdrojáky
« Odpověď #6 kdy: 02. 08. 2011, 16:15:39 »
hawran: No, mně se bohužel doxyxen nepodařilo přesvědčit aby vygeneroval jeden velký call graf, vždycky mi to rozseká. A i když rychlost není zásadní kritérium, dost mu to trvá ...

RDa: Ano, také mne napadlo že bych si napsal skript, ale nechci se s tím "babrat" v situaci kdy potřebuji vyřešit primárně jiný problém. Navíc zrovna tohle určitě už nějdo řešil, někde na to nějaká utilitka být musí.

backup: Díky, cflow vypadá nadějně.

Re: statický call graf pro C zdrojáky
« Odpověď #7 kdy: 02. 08. 2011, 16:20:57 »
hledejte "gcc plugin callgraph". vypagne vam egypt a dalsi. dehydra to myslim neumi. melt je kanon na vrabce. snad existuje neco mezi tim.
Díky, ten egypt nevypadá zle. A našel jsem ještě codeviz, to asi taky bude stát za odzkoušení.

Re: statický call graf pro C zdrojáky
« Odpověď #8 kdy: 03. 08. 2011, 08:25:03 »
hawran: No, mně se bohužel doxyxen nepodařilo přesvědčit aby vygeneroval jeden velký call graf, vždycky mi to rozseká. A i když rychlost není zásadní kritérium, dost mu to trvá ...
Aha. Mi nebylo jasné, co máš na mysli tím "rozseká".
Ale podle všeho jsi už něco našel, tak můžeš když tak napsat nějaký stručný update, jak jsi spokojený?
Prosím?

xxx

Re: Statický call graf pro C zdrojáky
« Odpověď #9 kdy: 03. 08. 2011, 08:49:06 »
Zde jsem nasel seznam utilit, ktere se pouzivaji k analyze "call graph"..

http://wikiand.com/wiki/Call_graph

Dejte pak vedet, ktery vam vyhovoval nejvice...