abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:44 | IT novinky

    Český stát by v budoucnu mohl provozovat vlastní alternativu ke komunikačním aplikacím typu WhatsApp, Signal, Telegram, Facebook Messenger a podobně. Cílem je zajistit bezpečnou datovou komunikaci pro stát a jeho důležité subjekty, jako jsou bezpečnostní složky, ministerstva a další organizace.

    Ladislav Hagara | Komentářů: 16
    dnes 11:22 | Pozvánky

    Už za týden, ve čtvrtek 4. června, se v Národní technické knihovně v pražských Dejvicích uskuteční další konference věnovaná tématům spojeným s IPv6 - Den IPv6. Program akce a registrační formulář jsou k dispozici na webu akce. Kapacita konference je omezená, proto organizátoři doporučují, aby se vážní zájemci přihlásili včas (k dnešnímu dni zbývá přibližně 30 volných míst). Konferenci Den IPv6 2026 organizují i letos společně sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 0
    dnes 05:22 | IT novinky

    Zařízení Steam Deck OLED bylo znovu naskladněno, ale vlivem rostoucích cen pamětí a úložišť má novou, vyšší cenovku. Steam Deck OLED 512 GB stojí nově 779 EUR (stál 569 EUR) a Steam Deck OLED 1 TB stojí 919 EUR (stál 679 EUR). Samotné zařízení se nijak nezměnilo a nové ceny tedy pouze odráží aktuální náklady na komponenty a další globální logistické výzvy, se kterými se potýká celá branže.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | IT novinky

    Český telekomunikační úřad zahajuje novou etapu využívání vysokofrekvenčního rádiového spektra v pásmu 26 GHz. Toto pásmo bude od 1. 7. 2026 otevřeno pro provoz moderních bezdrátových sítí, zejména sítí páté generace (5G), pevných bezdrátových přístupových sítí (FWA) a lokálních či průmyslových sítí určených například pro výrobní areály, logistická centra nebo technologické kampusy. Současně s otevřením pásma 26 GHz přistoupil ČTÚ ke zpřístupnění informací o využívání rádiových kmitočtů v tomto pásmu.

    Ladislav Hagara | Komentářů: 6
    včera 22:11 | IT novinky

    Logitech představil myš Signature Comfort Plus M850 L s polstrovanou opěrkou dlaně pro větší pohodlí a sadu s touto myší a klávesnicí s integrovanou opěrkou dlaní Signature Comfort Plus Combo MK880.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | IT novinky

    Gaël Duval se rozepsal o novinkách a plánech Murena a /e/OS. Počet uživatelů telefonů Murena a mobilního operačního systému /e/OS bez aplikací a služeb od Googlu se blíží 100 000. Ambicí je, aby se /e/OS stal třetí mobilní platformou v Evropě i na světě, s potenciálem dostat se i na PC. Blíží se vydání nové verze 4 s funkcemi zálohování a obnova, import e-mailů z Gmailu a rozpoznávání hlasu. Murena Workspace přinese videohovory, elektronický podpis a správu zařízení (MDM).

    Ladislav Hagara | Komentářů: 4
    včera 15:22 | Komunita

    Dnes a zítra probíhá Ubuntu Summit 26.04. Na programu je řada zajímavých přednášek. Sledovat je lze na YouTube. Úvodní slovo měli Mark Shuttleworth a Jon Seager.

    Ladislav Hagara | Komentářů: 1
    včera 05:00 | Nová verze

    Lazygit byl vydán ve verzi 0.62.0. Jedná se o TUI (Text User Interface) nadstavbu nad gitem.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Zajímavý článek

    Jiří Eischmann se v příspěvku na svém blogu o rozepsal o tom, kam se vyhledávání v jeho očích posledních 10 let posunulo, jaké má zkušenosti s AI vyhledáváním, proč na něm nechce záviset a jaké vyhledávací služby ho v poslední době zaujaly.

    Ladislav Hagara | Komentářů: 2
    včera 03:33 | Nová verze

    Wayland kompozitor Labwc byl vydán ve verzi 0.20.0. Labwc je inspirován správcem oken Openbox. Postavený je na wlroots.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (12%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (7%)
     (3%)
     (16%)
     (26%)
    Celkem 1736 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Vizualizace C++ kódu – CodeViz

    25.7.2010 09:56 | Přečteno: 1857× | Programování | Výběrový blog | poslední úprava: 25.7.2010 16:25

    Čtení a snaha porozumět cizímu kódu může zabrat mnoho času, protože se kód může dotýkat mnoha částí programu. Pokud člověk chce kódu porozumět v globálním měřítku, často se to neobejde bez různých obrázků. Proč si to nezautomatizovat?

    Úvod aneb o co jde

    Snad všichni znají nástroj call grind, který umí generovat call graph. Ovšem i ten má své hranice. Bohužel ten při použití s programem, u kterého bych si rád call graph vygeneroval padá. Navíc pokud jeho funkci chápu správně generuje call graph jenom pro konkrétní běh programu. Jinak řečeno, hledám program, který tohle zvládne vytáhnout ze zdrojového kódu.

    Asi první věc, na kterou narazíte při hledání call graph je článek na Wikipedii. Ze jmenovaných nástrojů se zdá, že CodeViz je přesně to, co hledám.

    Quest za funkčním CodeViz

    Jak už to tak bývá ne vše je tak snadné jak se zdá. CodeViz může používat pro zjištění jmen funkcí dvě cesty. Ta snazší je pomocí objdump. Druhou cestou je cesta s využitím opatchovaného gcc 3.4.6.

    Netrvá dlouho a už na mě z konsole kouká hláška make[1]: *** [all] Error 1 a nějaké ty další chyby. Kompilátor se tváří, jako kdyby některé #define nebyly definovány, i když jsou. Není to první podobný problém s gcc 4.5 co mám. Strávil jsem skoro celý den hledáním čistého řešení. To jsem nenašel a skončil jsem u prasáckého zakomentování všech postižených #ifdefů. Tak, konečně se mi to podařilo zkompilovat a nainstalovat a hned CodeViz zkouším. O tom ale později.

    Vzhledem k pracnosti zprovoznění opatchovaného gcc jsem se rozhodl udělat PKGBUILD pro Arch Linux. Dalších půl dne v prdeli. Rozhodl jsem se totiž kompilovat gcc ručně, bez použití skriptu v CodeViz. V samotném skriptu narazíte na vtipnou věc. Totiž když kompilujete gcc 3.4.6, tak to skončí chybou. Configure skript totiž u špatně vytvoří config.h pro libiberty. Zvláštní je, že pokud se dělá bootstrap tak se poprvé vygeneruje správně, pro finální kompilaci ale už ne. Řešením je tedy make || true, aby makepkg neskončilo na chybě kompilace, zkopírováním části install skriptu z CodeViz a znovuspuštením make.

    Ale ouha, zase to nefunguje. Nové verze makepkg mají totiž ve chvíli, kdy nějaký příkaz vrátí 1 okamžitě skončí s chybou. Proto jsem také při prvním volání make použil make || true abych se tomu vyhnul. Teď ale narážím na problém, kdy se testuje výstup grepu, jestli není náhodou nulový. Problém je, že grep v tom případě skončí s návratovým kódem 1 a tudíž shodí makepkg. Tady true už nepomůže. Naštěstí stačí postižený test vyhodit. Co to udělá na cizím stroji nevím, ale předpokládám, že ten test dopadne na všech Arch Linuxech stejně.

    Jak to funguje

    Funguje to, ale má to své masařky. Nejdřív začnu tím, jak to funguje. Pro začátek musíme vygenerovat soubor s grafem. Na to je v CodeViz skript genfull. Podle potřeby nastavíme jak má získat potřebné symboly a jazyk (C/C++).

    Začnu tím jednodušším a tím je získání symbolů pomocí objdump (parametr -g cobjdump pro C resp. cppobjdump pro C++). V tomhle případě genfull rekurzivně prohledá aktuální adresář a hledá binárky, pro které vytvoří soubor full.graph. Samozřejmě binárky musí obsahovat debug symboly, jinak je to k ničemu. Nevýhodou tohohle řešení je, že neuvidíte inlinované fce (ledaže byste vypnuli inlinování).

    Samozřejmě o předchozí možnosti jsem se dozvěděl až po tom, co jsem prošel martyriem s kompilací gcc. Takže teď ta horší cesta s gcc. Nejdřív musíme program, pro který chceme callgraph vygenerovat zkompilovat s pomocí opatchovaného gcc. Ten vytvoří ke každému zdrojovému souboru soubor s příponou .cdepn obsahující závislosti. Pokud se program linkuje s nějakou systémovou knihovnou, tak to samozřejmě nepůjde (myšleno na moderní distribuci kompilované gcc 4.x). Naštěstí k linkování dochází až na konci, takže soubory .cdepn jsem získal. Použití genfull je v zásadě stejné, akorát tentokrát vybíráme z možností -g cdepn a cppden.

    A nakonec k vygenerování callgraphu. full.graph by prý mělo jít nacpat rovnou do dot (součást GraphViz), ale to nedoporučuji. Callgraph je i u malého projektu dost rozsáhlý na to, abyste se ho vůbec dočkali. Proto CodeViz obsahuje skript gengraph. Ten umožní nastavit nějaká omezení, například maximální hloubku a u které funkce se má začínat. Pokud nespecifikujete jinak, tak se jako výstup použije PostScript.

    A nakonec k mouchám. I s použitím gengraph je generování callgraphu dost pomalé (hloubka >3 už se ani nevyplatí), navíc výsledný graf není zrovna přehledný (vždy jsem dostal příšernou nudli). Aby toho nebylo málo, pokud byl graf velký, měl jsem velké problémy s jeho otevřením. Okular i gv si na něm vylámali zuby, gv navíc řvalo nějakou chybu, takže je dost možné, že ps bylo vadné. Používat jiný výstup (konkrétně png) se mi neosvědčilo, kvůli použití Cairo backendu. Ten totiž nezvládne velké bitmapy a výsledek zmenší tak, že je z něj nečitelná mazanice. V mém případě výsledek zmenšil ca 10x.

    Závěr

    Ačkoliv CodeViz dělá to co má, vůbec mi nevyhovuje a nakonec používám jiný soft, ale o tom až jindy.


    PS: Omluvte případné chyby ale nechce se mi to po sobě číst.

           

    Hodnocení: 50 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    stativ avatar 25.7.2010 09:56 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Ukázkový postscript.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    25.7.2010 11:43 ____ | skóre: 15 | blog: _
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    To je teda pěkná šílenost.
    stativ avatar 25.7.2010 11:44 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Vždyť říkám, nudle :-D
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    25.7.2010 13:45 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Ked som to zvacsil, aby vyska bolo priblizne ako obrazovka (a sirka ako 40 obrazoviek), tak "Okular closed unexpectedly".
    If you hold a Unix shell up to your ear, you can you hear the C.
    25.7.2010 18:52 Jirka P
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    A poslal jsi bug do KDE bugzilly?
    25.7.2010 23:48 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Nie, tam som ich uz naposielal a na vsetky do jedneho sa vysrali. Ale mozno im dam este sancu, ked sa dobre vyspim.
    If you hold a Unix shell up to your ear, you can you hear the C.
    Luboš Doležel (Doli) avatar 28.7.2010 17:46 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Hmm, mně to sice nespadne, ale taky se mi tam vůbec nic neukáže - je tam jen logo Okularu.
    Grunt avatar 25.7.2010 11:11 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Sám jsem na samotný článek na Wikipedii narazil docela nedávno (jen pár dní zpět) a byl jsem popravdě docela překvapen. Já zas pro změnu hledám něco co by umělo vypisovat v reálném čase do konzole funkce, tak jak jsou volány za sebou, ale zdá se, že u call graphů jsem narazil. Jinak co zkusit klasickou GNU utilitu GNU cflow (neumí generovat, žádnou grafiku, ale jen textový výstup a ASCII Art což by v případě větších projektů zase mohlo být malé plus) a spojit ho Graphvizem (ten zas pro změnu bere výstup z cflow a umí z něj vygenerovat klasický graf).
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    stativ avatar 25.7.2010 11:40 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    cflow umí jenom C, na C++ si vyláme zuby.

    Jinak to co hledáš by mohl umět callgrind, protože sestavuje callgraph za běhu (nezkoušeno). Pokud by ti stačilo tracovat jenom volání externích knihoven, tak by mohlo pomoci latrace (taktéž nezkoušeno).
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    Grunt avatar 25.7.2010 11:47 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Jo, callgrinda jsem též zkoušel (společně s KCacheGrind – též doclea dobré), ale ten za běhu generuje callgrind.out.<pid> a navíc je docela složitý.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    Grunt avatar 25.7.2010 11:50 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Kecám. Ne s cflow, ale s gprof.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    stativ avatar 25.7.2010 12:08 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    gprof generuje call graph za běhu, což se mi moc nehodí.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    Grunt avatar 25.7.2010 12:19 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Se zas hodí mně, ale nehodí se mi, že to zase za běhu nevypisuje. To si člověk dneska nevybere.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    elviin avatar 27.7.2010 13:02 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    Na vypis funkci muzete pouzivat napr. v debug modu __LINE__, __PRETTY_FUNCTION__, __FILE__.
    Grunt avatar 27.7.2010 23:03 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Vizualizace C++ kódu – CodeViz
    To se mi ňák nezdá. To jsou standardní makra, ne? Nebo se od do co jsem se s nima učil něco změnilo?
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.