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 10:22 | Humor

    Už jste se prolétli na webu Google Earth? Přibyl tam Simulátor letu (Nástroje / Simulátor letu). Funguje i bez účtu Google [𝕏].

    Ladislav Hagara | Komentářů: 0
    dnes 09:55 | Nová verze

    Byla vydána nová verze 4.7 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.

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

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.6. Přehled novinek s náhledy v oznámení na blogu.

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

    V Edici CZ.NIC, knižní řady správce české národní domény, vychází nová kniha Martina Malého Kódy, buildy, firmwary. Autor po půl roce od vydání předchozího titulu přichází se svou již sedmou knihou, tentokrát zaměřenou na vývoj programového vybavení pro embedded zařízení. Publikace s podtitulem Základy vývojářského řemesla pro tvůrce hobby elektroniky nabízí praktického průvodce pro všechny, kdo své projekty vytvořené s Arduinem

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 11:44 | Komunita

    V Brně na FIT VUT probíhá dvoudenní open source komunitní konference DevConf.CZ 2026. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 15.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    17.6. 19:11 | Zajímavý projekt

    Vývojáři Ubuntu představili projekt Myna, tj. iniciativu zaměřenou na přidání funkce převodu řeči na text do prostředí desktopu Ubuntu. Dle plánu již v Ubuntu 26.10.

    Ladislav Hagara | Komentářů: 6
    17.6. 18:33 | Zajímavý software

    Společnost Epic Games představila nový open source systém pro správu verzí Lore navržený pro "bezprecedentní škálovatelnost dat i týmů a optimalizovaný pro projekty, včetně her a zábavy, které kombinují kód s velkými binárními soubory, aby uspokojil potřeby vývojářů i umělců". Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    17.6. 15:33 | IT novinky

    Úřad pro ochranu hospodářské soutěže (ÚOHS) provedl v říjnu 2024 místní šetření u společnosti Seznam.cz. Úřad prověřoval důvodné podezření na možné protisoutěžní jednání, konkrétně zneužití dominantního postavení. Krajský soud v Brně v květnu 2025 konstatoval, že toto šetření bylo nezákonné. Nejvyšší správní soud (NSS) včera rozhodl, že šetření bylo provedeno v souladu se zákonem. Krajský soud bude muset případ posoudit znovu.

    Ladislav Hagara | Komentářů: 0
    17.6. 12:22 | IT novinky

    Byl představen skládací telefon Commodore Callback 8020. Ani hloupý, ani chytrý. Pro fanoušky Commodore a digitálního minimalismu. Bez webového prohlížeče a sociálních sítí. S předinstalovaným WhatsAppem. S operačním systémem Sailfish OS.

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

    Pythoní attach-to-process pohodlněji

    27.11.2015 23:30 | Přečteno: 1427× | 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.