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í
×
    včera 22:22 | Komunita

    Upozornění pro uživatele Asahi Linuxu: Neaktualizujte macOS na verzi 27 Golden Gate! Apple změnil detekci spouštěcích oddílů. Po aktualizaci oddíl s Asahi Linuxem nevidí. Snad je to jenom chyba.

    Ladislav Hagara | Komentářů: 0
    včera 15:11 | Komunita

    Na webu konference Den IPv6, která se konala 4. června v Národní technické knihovně v pražských Dejvicích, jsou nyní k dispozici všechny prezentace (v PDF) a jejich videozáznamy. Organizátory konference byly i letos sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 0
    včera 13:11 | Nová verze

    Byla vydána nová verze 9.1.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Vypíchnout lze vylepšené vyhledávání nebo podporu Pixel Motion Photos. Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

    Ladislav Hagara | Komentářů: 0
    včera 11:44 | Pozvánky

    Přihlaste svou přednášku na další ročník konference LinuxDays, který proběhne 3. a 4. října na FIT ČVUT v pražských Dejvicích. Příjem témat poběží do konce prázdnin, pak proběhne veřejné hlasování a následně sestavení programu.

    Petr Krčmář | Komentářů: 2
    včera 04:44 | Nová verze

    Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.

    Ladislav Hagara | Komentářů: 2
    8.6. 22:44 | IT novinky

    Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.

    Ladislav Hagara | Komentářů: 0
    8.6. 22:22 | Nová verze

    Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).

    Ladislav Hagara | Komentářů: 0
    8.6. 20:44 | Nová verze

    aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.

    Ladislav Hagara | Komentářů: 5
    8.6. 12:55 | IT novinky

    Byly vyhlášeni vítězové a zveřejněny vítězné zdrojové kódy (YouTube, GitHub) již 29. ročníku soutěže International Obfuscated C Code Contest (IOCCC), tj. soutěže o nejnepřehlednější (nejobfuskovanější) zdrojový kód v jazyce C.

    Ladislav Hagara | Komentářů: 0
    8.6. 12:44 | IT novinky

    Evropská komise předložila evropský balíček pro technologickou suverenitu, tedy soubor opatření, která mají posílit kapacity EU v oblasti polovodičů, umělé inteligence, cloudu a open source. To Evropě pomůže stát se lídrem v oblasti umělé inteligence, posílit její digitální autonomii a vytvářet podmínky pro udržitelnější digitální budoucnost.

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


    Opravujeme chyby v softwaru: inotify-tools

    Příběh o tom, jak probíhá hledání a opravování chyby v autorovi dosud neznámém kódu, vypráví článek Opravujeme chyby v softwaru: inotify-tools. Krok za krokem stáhneme zdrojové kódy, přeložíme program a najdeme chybu – seznámíme se se základními postupy a nástroji pro diagnostiku chyb (verzovací systém, IDE, GNU Debugger, Kompare).

    5.10.2015 12:14 | xkucf03 | Zajímavý článek


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

    Komentáře

    Vložit další komentář

    5.10.2015 12:40 Boris Dušek | skóre: 22 | blog: everything
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Pěkné :-)
    vim ~/.emacs
    5.10.2015 13:54 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    S tou předčasnou optimalizací je trochu vedle. Jak je vidět z
    for ( i = 0; i < strlen(string); ++i ) {
    
    autoři si s optimalizacemi moc hlavu nedělali. Je to o vyhnutí se dynamické alokaci (o 4kB poli v lokální proměnné nemluvě).

    Na githubu mají dobrou opravu:
    Do not double escape names. Fixes #36
    :-)
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    xkucf03 avatar 5.10.2015 22:21 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    S tou předčasnou optimalizací je trochu vedle. Jak je vidět z

    Asi optimalizovali na obsazenou paměť ne na výkon, ale vyústilo to v to, že si paměť nechtěně přepisovali. To už mi snad přijde lepší, když tam bude únik paměti a program je nakonec sestřelen OOM killerem, než aby tam byla potenciálně bezpečnostní díra v podobě přetečení.

    Samozřejmě ideál je to napsat tak, aby paměť neunikala, žralo jí to třeba o něco víc, ale konstantně, a bylo to bezpečné.

    for ( i = 0; i < strlen(string); ++i ) {

    Někdy se iteruje v opačném směru, k nule, což je trochu nezvyk, ale vlastně proč ne (pokud nezáleží na pořadí).

    Nebo si klasicky uložit délku do proměnné.

    o 4kB poli v lokální proměnné nemluvě

    A jak by to mělo být správně? Alokovat dvojnásobek délky vstupu + uvozovky a nulový bajt? (jak navrhuje Kruci pod článkem) Nebo si alokovat nějakou dynamickou strukturu (jakou?) o velikosti tak 120 % vstupu, protože tam se to většinou vejde (a případně se ještě zvětší).

    Do not double escape names. Fixes #36

    Njn, chyba tam zůstala dál, jen se přestala projevovat.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    6.10.2015 08:01 Kvakor
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    for ( i = 0; i < strlen(string); ++i ) {

    Někdy se iteruje v opačném směru, k nule, což je trochu nezvyk, ale vlastně proč ne (pokud nezáleží na pořadí).

    Nebo si klasicky uložit délku do proměnné.

    Se zapnutými optimalizacemi by měl překladač toereticky uložit výsledek strlen(string) do neviditelné automatické dočasné proměnné (popř. registru) a tu používat v cyklu, i když osobně bych na to raději nespoléhal - překladač musí mít jistotu, že vrácená hodnota je konstantní po celou dobu cyklu (tj. např. žádná pointerová aritmetika nebo předávání dalším funkcím, pokud není parametr const), v opačném případě bude volat strlen(string) při každém průchodu. Když už si někdo nechce zaplácávat zásobník, může proměnné použité k uchování délky řetězce nastavit jako register a doufat, že to překladač pochopí správně a nebude jí alokovat žádnou paměť.

    A i když iterovat "pozadu" je sice z algoritimického hlediska ekvivaltení iterování směrem vpřed, procesor, cache a paměti apod. jsou dělané na to, že se paměť čte směrem dopředu, ne odzadu (viz prefetch),

    Josef Kufner avatar 6.10.2015 20:05 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Ta dynamická struktura je celkem snadno implementovatelná. Stačí si projít ukázkový příklad v dokumentaci vsprintf(), ta zajímavá funkce se jmenuje realloc(). Na začátku si alokuješ těch 120% a když to nebude stačit, tak jen string = realloc(string, 2 * strlen(string)) a hotovo.
    Hello world ! Segmentation fault (core dumped)
    6.10.2015 21:37 johniez | skóre: 17 | blog: xyz | Praha
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    A pro pripady, kdy by realloc selhal, je dobry si ulozit puvodni hodnotu pointru string jeste nekam jinam (jinak nebude mozny uvolnit puvodni pamet).
    Josef Kufner avatar 6.10.2015 21:45 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Nějak se mi tam nechtělo psát to "Pro názornost zjednodušeno." ;-)
    Hello world ! Segmentation fault (core dumped)
    5.10.2015 23:11 biolog
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Jazyk C (na rozdíl od C++) nic nezakrývá, takže programátor má neomezenou možnost napsat kód přesně, jak chce. Ale pak to vede na to, že programátoři vyrábí statická pole, protože C nemá prostředky (kromě komentářů) jak říct, že volající musí vrácený buffer s escapovaným stringem uvolnit. (V C++ byste vrátili std::string, ve vyšších jazycích ta chyba napsat ani nejde.) Ale hlavně máte moc! Cítíte ji?!

    Asserce by taky byla na místě, jak navrhl Jindřich Makovička.
    5.10.2015 13:55 Kkk
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Nevím proč, ale velmi dlouho jsem přemýšlel, jak se hledají chyby v autorovi softwaru.
    5.10.2015 15:37 mankind_boost | skóre: 7 | Hliněná chýše, 5482/3
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Tyhle věci se většinou debugují pomocí (f)MRI.
    Jen skutečný mankind_boost je zárukou kvality.
    5.10.2015 16:46 Jindřich Makovička | skóre: 17
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Kristova noho. U těch statických proměnných by mělo být asi tak milión varování a hlavně assert, že char *string náhodou nesměřuje někam do csv[]. Plus vstup i výstup const char *. A proč je statický i a ind, to mi už vůbec hlava nebere.

    Celkem si dovedu představit, že to blbne, když se escapuje dvakrát a zdroj je tudíž stejný jako cíl.
    5.10.2015 20:54 hulmiho-ukolen
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Krisztusza nohosz >8~D , iszten-be hazso,piscabo lofasz fuledbe A$ tuzedesz holocsko @&#°+
    xkucf03 avatar 5.10.2015 23:23 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    assert, že char *string náhodou nesměřuje někam do csv[]

    Jenže pak by nešlo escapovat dvakrát. V tomto programu to asi není potřeba, ale jinak se to hodí (např. když chci někam vložit ukázku, jak vypadá escapovaný kód).

    Pro mě má funkce prostě nějaký definiční obor a nějakou návratovou hodnotu a můžu ji zanořit třeba stokrát a pořád by měla fungovat. Proč by měla mít takové omezení jenom kvůli tomu, jaký jazyk jsem si pro implementaci vybral?

    Dobré řešení asi je předávat ten buffer zvenku jako parametr a uvnitř nic nealokovat, ale pak to zase není funkce, ale spíš procedura.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2015 23:26 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Dobré řešení asi je předávat ten buffer zvenku jako parametr a uvnitř nic nealokovat, ale pak to zase není funkce, ale spíš procedura.
    Hlavne nevis jak velky ho budes potrebovat.
    We lived, we danced, we raced, we run, from the oblivion to come, Dressed for the last dance of a hundred thousand suns.
    xkucf03 avatar 5.10.2015 23:29 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools

    To je pravda – musím znát implementační detaily té funkce (od kterých bych měl normálně abstrahovat), abych určil maximální velikost výstupu. Jak to tedy napsat správně?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2015 23:40 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    A co je spatneho na tom ze vrati novy buffer nad kterym pak musim sam zavolat free()? Pripadne pokud uz jsem zhyckany tak knihovna muze drzet pointery na vsechny naalokovane buffery u sebe a uklidit po sobe pri zavolani nejake cleanup funkce.
    We lived, we danced, we raced, we run, from the oblivion to come, Dressed for the last dance of a hundred thousand suns.
    xkucf03 avatar 8.10.2015 11:35 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools

    Na tom mi nesedí, že se paměť uvolňuje někde jinde, než kde byla alokována, resp. že je za to odpovědný někdo jiný a je to hodně náchylné k chybám. Ale asi je to v C normální…

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2015 23:58 Jindřich Makovička | skóre: 17
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Jenže tenhle kód ani neumí escapovat dvakrát za sebou - jakmile narazí na uvozovky, tak je zapisuje na následující pozici a protože cíl==zdroj, escapuje stále dokola, dokud z bufferu nevyjede. Pokud potřebujete escapovat dvakrát, bylo by potřeba rozhraní ala snprintf, tj. (char *dest, int n, const char *src).
    5.10.2015 18:09 Sid
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    tato veta ma teda rozsekala "A ty statické lokální proměnné jsou taky divné – asi nějaká céčkařská optimalizace, které jako javista nemůžu rozumět…" :-).
    5.10.2015 21:28 Jardik
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    To psalo nejaky prase ne? Jak se vubec neco takoveho muze dostat do nejake distribuce??
    xkucf03 avatar 5.10.2015 22:27 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Statická analýza kódu

    BTW: dá se to nějak automaticky analyzovat nebo to musí všechno pročítat člověk? Odhalí nějaký nástroj tyhle problémy?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2015 23:01 johniez | skóre: 17 | blog: xyz | Praha
    Rozbalit Rozbalit vše Re: Statická analýza kódu
    Klee?
    6.10.2015 00:00 Jindřich Makovička | skóre: 17
    Rozbalit Rozbalit vše Re: Statická analýza kódu
    Něco málo najde cppcheck, taky neškodí zkusit kromě GCC i Clang (oboje s -Wall případně -Wextra). Za chodu potom Address Sanitizer a Memory Sanitizer, viz každá zprávička o Google Chrome :)
    5.10.2015 21:42 hz
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Tyhle selfpromo zpravicky (jeste v kategorii zajimavy clanek) - nevim co si o tom myslet :-)
    xkucf03 avatar 5.10.2015 22:24 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Taky bych radši, kdyby zprávičky psal někdo jiný ve třetí osobě ;-)
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 5.10.2015 23:09 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Opravujeme chyby v softwaru: inotify-tools
    Hoď příště i do blogu a problém je vyřešen.

    Založit nové vláknoNahoru


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