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 00:33 | Nová verze

    Byla vydána OpenIndiana 2026.10. Unixový operační systém OpenIndiana (Wikipedie) vychází z OpenSolarisu (Wikipedie).

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

    Americký výrobce polovodičů onsemi (ON Semiconductor) zrušil plány na rozšíření výroby v rožnovském závodě v Česku za dvě miliardy dolarů (podle aktuálního kurzu zhruba 43,5 mld. Kč). Důvodem je vývoj na trhu.

    Ladislav Hagara | Komentářů: 10
    7.11. 13:00 | Bezpečnostní upozornění
    Nové vydání zlib opravuje několik problémů při kompresi a dekompresi dat, přetečení bufferů, čtení mimo vyhrazenou paměť, únik neinicializovaných dat. Zvlášť významné jsou chyby v inflateGetDictionary(), inflateSync() a gzwrite(), které mohou způsobit poškození paměti. Vysoká relevance - zlib používá řada systémových i aplikačních komponent.
    vencour | Komentářů: 0
    7.11. 12:25 | Bezpečnostní upozornění
    Digicert hlásí neoprávněné čtení archivních zákaznických údajů. Došlo k němu po migraci z února 2025, po níž se interní systém, dříve dostupný jen přes VPN, stal přístupným z internetu. Chyba v oprávněních umožnila nově vytvořeným účtům číst archivní záznamy. K přístupu k datům mělo dojít mezi 27. červnem a 2. červencem 2026. DigiCert neoprávněné čtení potvrdil až 19. října 2026. Problém zpočátku vyhodnotil jako tvorbu účtů, ne jako … více »
    vencour | Komentářů: 0
    7.11. 04:44 | Pozvánky

    O víkendu probíhá na FIT VUT v Brně konference OpenAlt 2026 o otevřeném softwaru a datech, IT bezpečnosti, DIY a IoT. Na programu je spousta zajímavých přednášek. Pokud jste v Brně, stavte se. Vstup zdarma. Přednášky lze sledovat i online na VHSky a YouTube.

    Ladislav Hagara | Komentářů: 0
    7.11. 02:11 | IT novinky

    Qualcomm uzavřel víceletou dohodu se SpaceX. Bude dodávat rádiové technologie, baseband jednotky a software pro plánovanou pozemní 5G síť Starlink Mobile. Výstavba má zahrnovat desítky tisíc základnových stanic v USA. Zahájení nasazování se očekává v roce 2027. Qualcomm dohodu označuje za svůj dosud největší 5G kontrakt.

    vencour | Komentářů: 0
    7.11. 02:00 | IT novinky

    Google rozšířil Cloud Vulnerability Reward Program. Nově nabízí odměnu až 250 tisíc dolarů za vysoce závažné architektonické bezpečnostní chyby označované jako Root-in-Cloud.

    vencour | Komentářů: 0
    6.11. 12:22 | IT novinky

    V březnu byla oznámena spolupráce GrapheneOS s Motorolou. Nejnovější vlajka Motorola Signature 27 je první Motorola s oficiální podporou GrapheneOS. GrapheneOS (Wikpedie) je varianta Androidu zaměřující se na bezpečnost a soukromí.

    Ladislav Hagara | Komentářů: 0
    6.11. 04:55 | Nová verze

    Omarchy (Wikipedie) je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 4.5.0. Nově také pro Apple Silicon, konkrétně pro M1/M2/M3/Neo MacBooky.

    Ladislav Hagara | Komentářů: 4
    6.11. 03:22 | Nová verze

    Byla vydána nová stabilní verze 8.3 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 156 s bezpečnostními opravami z Chromia 157. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 3008 hlasů
     Komentářů: 35, poslední 6.11. 23:27
    Rozcestník

    Pythoní attach-to-process pohodlněji

    27.11.2015 23:30 | Přečteno: 1646× | programování | Výběrový blog | poslední úprava: 27.11.2015 23:58

    Největší nedostatek pythonu z hlediska programátora jsem považoval absenci připojení k běžícímu procesu, pokud nebyl předtím nastartován v debuggeru. Před pár lety jsem na to našel hack a nedávno jsem zjistil, že jeho podobu implementovali do PyCharm IDE, kde to jde teď na pár kliknutí.

    Je to už 6 let, co jsem psal návod, jak ohackovat Python přes gdb a dostat funkcionalitu známou jako attach-to-process z gdb. PyCharm to umí a má to implementováno dost podobným hackem, taky přes gdb. Jenže pro programátora mnohem pohodlněji, protože je to integrováno jako featura IDE. I v komunitní free verzi.

    PyCharm vs můj starý hack

    Hlavní rozdíl je, že se člověk nemusí starat o debug symboly. A implementace je o poznání složitější. GDB musí mít zabudovanou podporu pythonu, přes něj se pythoní proces interně ovládá. K tomu je potřebná knihovna závislá na platformě/architektuře. Přímo podporují x86/amd64, ale k dispozici jsou zdrojáky, takže by to šlo nejspíš použít i na jinou architekturu (pro nějaké embedded věci jako Raspberry Pi). Kombinaci remote debugger + attach-to-process jsem ještě nezkoušel, protože remote debugger je jenom v placené verzi - ale teoreticky by to asi mohlo fungovat.

    Oproti mé staré metodě používá jiný způsob zabezpečení konzistentního stavu interpreteru - přes PyGILState_Ensure a PyGILState_Release. Pravděpodobně je to korektnější než můj původní hack. Pak se použije trik s PyRun_SimpleString, případně interní trasovací funkce _PYDEVD_ExecWithGILSetSysStrace.

    Musím říct, že z funkcionality jsem příjemně překvapen. Asi jedinou chybu na kráse, co jsem zatím našel je, že po použití attach-to-process a odpojení od procesu mi ten proces nešel zabít bez SIGKILL.

    Memory profiling s injekcemi

    Nový největší nedostatek je místo původního chybějícího attach-to-process neexistence rozumného memory profileru pro python. Především pokud je potřeba z nějakého několik dní běžícího procesu vydumpovat stav objektů v alokátoru. O vizualizaci škoda mluvit, objgraph sice funguje, ale jeho použitelnost je dost slabá. Hlavně pokud těch objektů máte několik miliard. Podobně RunSnakeMem.

    Jediné, co jsem v dané situaci považoval za marginálně použitelné, je meliae. V repozitářích se vyskuje, bohužel na druhé straně to taky už vypadá na mrtvý projekt. S gdb hackem lze statistiku udělat takhle (běžícího procesu, jinak nepotřebujete GDB):

    # Stary hack s breaknutim uvnitr VM, viz puvodni zapisek
    define breakvm
            tbreak ceval.c:1099
    end
    
    define meliae_dump
            breakvm
            continue
            call PyRun_SimpleString("from meliae import scanner; scanner.dump_all_objects('/tmp/meliae_dump.json')")
    end
    

    V GDB nebo přes GDB machine interface pak stačí zadat meliae_dump. Statistiku vypíšeme následovně:

    from meliae import loader
    om = loader.load('/tmp/meliae_dump.json')
    s = om.summarize()
    print s
    

    Příklad výstupu (na jedné staré GUI aplikaci, co jsem měl zrovna po ruce):

    Total 188023 objects, 654 types, Total size = 36.4MiB (38211601 bytes)
     Index   Count   %      Size   % Cum     Max Kind
         0    4211   2   8094536  21  21 3146008 dict
         1    3342   1   7016535  18  39 2097152 numpy.ndarray
         2   50560  26   5511918  14  53   19388 str
         3   51086  27   4423192  11  65    3040 tuple
         4     366   0   1662048   4  69   49488 module
         5    1237   0   1375544   3  73    1112 Path
         6    9534   5   1144080   2  76     120 function
         7    9016   4   1081920   2  79     120 code
         8     778   0    703312   1  81     904 type
         9     686   0    642096   1  82     936 PyQt4.QtCore.pyqtWrapperType
        10     180   0    614880   1  84    3416 Line2D
        11     529   0    482448   1  85     912 sip.enumtype
        12    2259   1    472160   1  86   36992 list
        13     134   0    457744   1  88    3416 Text
        14   15621   8    374904   0  89      24 sip.methoddescriptor
        15    3898   2    311840   0  89      80 wrapper_descriptor
        16    3222   1    283536   0  90      88 weakref
        17    9871   5    236904   0  91      24 float
        18     594   0    209088   0  91     352 WeakKeyDictionary
        19     138   0    153456   0  92    1112 Distribution
    

    Vedlejší efekty meliae injekce

    Samotný kód meliae způsobí, že procesu ještě vzroste používaná RAM (RSS) a to značně (řádově klidně 25-50%). Před použitím tam musí být rezerva. Když už proces swapuje, je pozdě. Nebo si počkáte.

    Dumpy paměti celkem trvají a výsledkem je dost velký soubor, řádově jsem se pohyboval asi tolik GB, kolik měl sledovaný proces. Mnoho malých objektů. Po načtení a zpracování statistiky lze očekávat, že to spolkne asi tolik paměti, kolik měl soubor na disku.

    S pydev gdb helper knihovnou z PyCharm by to šlo skombinovat lépe, aby to bylo přenositelnější, ale zatím jsem to nepotřeboval.        

    Hodnocení: 100 %

            špatné • dobré        

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

    Komentáře

    Vložit další komentář

    Bystroushaak avatar 28.11.2015 06:35 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Pythoní attach-to-process pohodlněji
    Zajímavé, neznal jsem.

    Osobně většinou používám prosté python -m pdb script.py.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.