Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Tomáš Vondra 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).
-
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 ...
-
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.
-
Pro odstranění ifdef harakiry není nic snažšího, než prohnat zdrojáky preprocesorem.
-
cflow
-
hledejte "gcc plugin callgraph". vypagne vam egypt a dalsi. dehydra to myslim neumi. melt je kanon na vrabce. snad existuje neco mezi tim.
-
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ě.
-
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í.
-
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?
-
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...