strace - strace

obejmout
Logo Strace. Svg
Původní autoři Paul Kranenburg
Vývojáři Dmitrij Levin
Stabilní uvolnění
5,14 / 2. září 2021 ; Před 40 dny ( 2021-09-02 )
Úložiště
Napsáno C
Operační systém Linux
Plošina AArch64 , DEC Alpha , ARC , ARM EABI/OABI , AVR32 , Blackfin , C-SKY, HP PA-RISC , IA-32 , IA-64 , Motorola 68k , Imagination META , MicroBlaze , MIPS , Nios II , OpenRISC , Power ISA 32/64 bit, RISC-V , System/390 / z/Architecture , SuperH 32/64 bit, SPARC 32/64 bit, TILE , TILEPro , TILE-Gx , x86-64 , x32 ABI , Xtensa
K dispozici v Angličtina
Typ Ladění
Licence LGPL v2.1+
webová stránka strace .io Upravte to na Wikidata

strace je diagnostický, ladicí a instrukční nástroj uživatelského prostoru pro Linux . Používá se k monitorování a manipulaci s interakcemi mezi procesy a linuxovým jádrem , které zahrnují systémová volání , dodávky signálů a změny stavu procesu. Operaci strace umožňuje funkce jádra známá jako ptrace .

Některé systémy podobné Unixu poskytují další diagnostické nástroje podobné strace, například vazník .

Dějiny

Strace byl původně napsán pro SunOS Paulem Kranenburgem v roce 1991, podle jeho autorských práv, a publikoval na začátku roku 1992, ve svazku tři comp.sources.sun. Počáteční soubor README obsahoval následující:

strace (1) je nástroj pro sledování systémových volání pro systémy Sun (tm) podobně jako trasování programu dodávané společností Sun (1) . strace (1) je užitečný nástroj pro ladění programů, pro které není k dispozici žádný zdroj, který bohužel obsahuje téměř veškerý systémový software dodávaný společností Sun.

Později Branko Lankester přenesl tuto verzi na Linux , svoji verzi vydal v listopadu 1992 a druhé vydání následovalo v roce 1993. Richard Sladkey zkombinoval tyto oddělené verze strace v roce 1993 a v roce 1994 přenesl program na SVR4 a Solaris , což mělo za následek strace 3.0 to bylo oznámeno v comp.sources.misc v polovině roku 1994.

Počínaje rokem 1996 udržoval obrys Wichert Akkerman. Během jeho působení se vývoj strace přesunul do CVS ; byly představeny porty pro FreeBSD a mnoho architektur na Linuxu (včetně ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC). V roce 2002 bylo břemeno udržování strace přeneseno na Roland McGrath. Od té doby získala strace podporu pro několik nových architektur Linuxu (AMD64, s390x, SuperH), pro některé z nich podporu dvou architektur a získala řadu přírůstků a vylepšení v dekodérech syscalls na Linuxu; vývoj strace v tomto období migroval na git . Od roku 2009 je strace aktivně udržována Dmitrijem Levinem. Strace od té doby získala podporu pro architektury AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC-V, Tile/TileGx, Xtensa.

Poslední verze strace, která měla nějaký (evidentně mrtvý) kód pro operační systémy jiné než Linux, byla 4.6, vydaná v březnu 2011. Ve verzi strace 4.7, vydané v květnu 2012, byl odstraněn veškerý jiný kód než Linux; od verze 4.13 se projekt řídí plánem vydání jádra Linuxu a ve verzi 5.0 také podle schématu verzí Linuxu.

V roce 2012 strace také získala podporu pro trasování cesty a dekódování cesty deskriptoru souboru. V srpnu 2014 byla vydána strace 4.9, kde byla přidána podpora pro tisk trasování zásobníků. V prosinci 2016 byla implementována funkce injekce chyby syscall .

Historie verzí

Verze Datum vydání Významné změny
5.14 2. září 2021
5.13 18. července 2021
5.12 26. dubna 2021
5.11 17. února 2021
5.10 14. prosince 2020
5.9 24. září 2020
5.8 6. srpna 2020
5.7 1. června 2020
5.6 7. dubna 2020
5.5 6. února 2020
5.4 28. listopadu 2019
5.3 25. září 2019
5.2 12. července 2019
5.1 22. května 2019
5,0 19. března 2019
4.26 26. prosince 2018
4.25 30. října 2018
4.24 14. srpna 2018
4.23 14. června 2018
4.22 5. dubna 2018
4.21 13. února 2018
4.20 13. listopadu 2017
4.19 5. září 2017
4.18 5. července 2017
4.17 24. května 2017
4.16 14. února 2017
4.15 14. prosince 2016
4.14 4. října 2016
4.13 26. července 2016
4.12 31. května 2016
4.11 21. prosince 2015
4.10 06.03.2015
4.9 15. srpna 2014
4.8 3. června 2013
4.7 2. května 2012
4.6 15. března 2011
4.5.20 13. dubna 2010
4.5.19 21. října 2009
4.5.18 28. srpna 2008 Přidána podpora pro subpage_prot syscall specifický pro POWER v Linuxu
4.5.17 21. července 2008 -F vlajka je zastaralá
4.5.16 3. srpna 2007 Byla přidána podpora pro nové move_pages, utimensat, signalfd, timerfd, eventfd, getcpu, epoll_pwaitsystémových volání na Linux
4.5.15 16. ledna 2007 Byla přidána podpora pro nové *at, inotify*, pselect6, ppolla unsharesystémových volání na Linuxu
4.5.14 16. ledna 2007 Systémové telefonní číslo lze dodat ve -especifikaci
4.5.13 3. srpna 2005 Přidejte descpodporu skupiny syscall do-e trace=
4.5.12 08.06.2005
4.5.11 22. března 2005
4.5.10 13. března 2005
4.5.9 4. února 2004
4.5.8 19. října 2004 Decode mbind, [sg]et_mempolicy, waitid, fadvise64{,_64}a epoll_*systémová volání, RTC_*IOCTL na Linux
4.5.7 31. srpna 2004
4.5.6 12. července 2004 Přidána podpora pro 64bitovou architekturu SPARC v systému Linux.
4.5.5 27. června 2004
4.5.4 3. června 2004
4.5.3 16. dubna 2004 Přidána podpora pro mq_*syscalls v Linuxu
4.5.2 1. března 2004
4.5.1 13. listopadu 2003
4.5 24. září 2003 Údržba přešla na Rolanda McGratha; přidána podpora x86-64 v Linuxu s podporou trasování kompatibilních procesů; přidána podpora pro architektury SH a SH64 v Linuxu; -Epřidána možnost
4.4 19. srpna 2001
4.3.1 7. dubna 2001
4.3 1. dubna 2001 Přidána podpora pro architektury HP PA/RISC a IA-64 v Linuxu; přidána podpora pro FreeBSD na IA-32
4.2 21. ledna 2000 Přidána podpora pro architekturu IBM Z v Linuxu
4.1 26. listopadu 1999 Přidána podpora pro architekturu MIPS v Linuxu
4.0.1 25. července 1999
4,0 09.07.1999
3.99.1 09.06.1999
3,99 27. dubna 1999 Nový správce, Wichert Akkerman; přidána podpora pro architektury IBM POWER, SPARC a ARM v Linuxu
3.1 1. června 1996 Přidána podpora pro architektury Irix, m68k a DEC Alpha v Linuxu; přidána podpora pro -o!syntaxi voleb; přidána podpora pro třídy syscall ( file, process)
3,0 09.07.1994 Počáteční verze pro více platforem od Richarda Sladkeyho. Zahrnuje podporu pro -x, -q, -e( trace, abbrev, verbose, raw, signal, reada writekvalifikační), -c, -ivolby

Použití a funkce

Nejběžnějším použitím je spuštění programu pomocí strace, která vytiskne seznam systémových volání provedených programem. To je užitečné, pokud program neustále havaruje nebo se nechová podle očekávání; například pomocí strace může odhalit, že se program pokouší získat přístup k souboru, který neexistuje nebo jej nelze přečíst.

Alternativní aplikací je použít -pvlajku k připojení ke spuštěnému procesu. To je užitečné, pokud proces přestal reagovat a může například odhalit, že proces blokuje při pokusu o připojení k síti.

Strace mimo jiné umožňuje následující:

  • Zadání filtru názvů syscall, které by měly být sledovány (prostřednictvím -e trace=možnosti): podle názvu, jako klon, vidlička, vfork ; pomocí jedné z předdefinovaných skupin, jako je %ipc nebo %soubor ; nebo (od strace 4.17) pomocí syntaxe regulárních výrazů, jako -e trace=/clock_.*.
  • Zadání seznamu cest, které se mají vysledovat ( -P /etc/ld.so.cachenapříklad).
  • Zadání seznamu deskriptorů souborů, jejichž I/O by mělo být vyhozeno ( -e read=a -e write=možnosti).
  • Počítání systémového volání doby provedení a počet ( -T, -c, -Ca -wopcí; -Uvolba umožňuje tisk dalších informací, jako je minimální a maximální syscall době spuštění).
  • Tisk relativních nebo absolutních časových razítek ( -ta -rmožností).
  • Manipulace se spuštěnými syscalls ( volitelně): úprava návratu ( ; od strace 4.16) a chybového kódu ( ; od strace 4.15) zadaných syscallů, vkládání signálů ( ; od strace 4.16), zpoždění ( a ; od strace 4.22), a po jejich provedení upravovat data označená argumenty syscall ( a ; od strace 5.11).-e inject=syscall specification:tampering specification:retval=:error=:signal=:delay_enter=:delay_exit=:poke_enter=:poke_exit=
  • Extrahování informací o deskriptorech souborů (včetně soketů, -yvolba; -yyvolba poskytuje některé další informace, jako adresy koncových bodů pro zásuvky, cesty a hlavní/vedlejší čísla zařízení pro soubory).
  • Tisk trasování zásobníků, včetně (od verze 4.21) demanglování symbolů ( -kvolitelně).
  • Filtrování podle stavu návratu syscall ( -e status=možnost; od strace 5.2).
  • Proveďte překlad ID vláken, procesů, skupin procesů a relací, které se objevují ve stopě, do prostoru názvů PID strace ( --pidns-translationvolba; od strace 5.9).
  • Dekódování kontextových informací SELinux spojených s procesy, soubory a deskriptory ( --secontextvolitelně; od verze 5.12).

strace podporuje dekódování argumentů některých tříd příkazů ioctl , jako jsou BTRFS_* , V4L2_* , DM_* , NSFS_* , MEM* , EVIO* , KVM_* a několik dalších; podporuje také dekódování různých protokolů netlink .

Jelikož strace pouze podrobně popisuje systémová volání, nelze jej použít k detekci tolika problémů jako debugger kódu, jako je GNU Debugger (gdb). Jeho použití je však snazší než ladicí program kódu a je to velmi užitečný nástroj pro správce systému. Výzkumníci jej také používají ke generování trasování systémových volání pro pozdější přehrání systémových volání .

Příklady

Následuje příklad typického výstupu stracepříkazu:

user@server:~$ strace ls
...
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 18 entries */, 4096)   = 496
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA

Výše uvedený fragment je pouze malou částí výstupu strace při spuštění na příkaz ' ls '. Ukazuje, že aktuální pracovní adresář je otevřen, zkontrolován a načten jeho obsah. Výsledný seznam názvů souborů je zapsán na standardní výstup.

Podobné nástroje

Různé operační systémy obsahují další podobné nebo související instrumentační nástroje, které nabízejí podobné nebo pokročilejší funkce; některé nástroje (i když používají stejný nebo podobný název) mohou používat zcela odlišné pracovní mechanismy, což má za následek různé sady funkcí nebo výsledky. Mezi tyto nástroje patří následující:

Viz také

Poznámky

Reference

externí odkazy