Provided by:
manpages-pl_20060617-3_all 
NAZWA
strace - led wywolania systemowe i sygnaly
SK/LADNIA
strace [ -dffhiqrtttTvxx ] [ -akolumna ] [ -ewyra ] ... [ -oplik ] [
-ppid ] ... [ -srozmiarnapisu ] [ -uuytkownik ] [ komenda [ arg ... ]
]
strace -c [ -ewyra ] ... [ -Owydatki ] [ -Ssortuj ] [ komenda [ arg
... ] ]
OPIS
W najprostszym przypadku, strace wykonuje zadan komend `komenda' a si
ona nie skoczy. Strace przechwytuje i nagrywa wywolania systemowe,
dokonane przez proces, oraz sygnaly, ktore do niego dotarly. Nazwa
kadego wywolania, oraz jego argumenty, s wypisywane na wyjcie
standardowe bldu, lub do pliku podanego w opcji -o.
strace jest uytecznym narzdziem diagnostyki, debuggowania.
Administratorzy systemow, diagnostycy i napotykacze problemow zauwa, e
jest nieocenione dla rozwizywania problemow z programami, ktorych rodel
nie ma wprost dostpnych. Strace bowiem nie potrzebuje rekompilacji aby
go uy. Studenci, hackerzy i ogolnie zainteresowani zauwa, e z ledzenia
wywola systemowych mona si wiele nauczy o systemie. Programici zauwa, e
skoro wywolania systemowe i sygnaly s zdarzeniami zachodzcymi na
interfejsie uytkownik/jdro, to ich bliska obserwacja moe by bardzo
uyteczna do izolowania bldow, sprawdzania czystoci i probowania
wylapywania ulotnych warunkow.
Kada ledzona linia zawiera nazw wywolania systemowego, za ktor nastpuj
jego argumenty, otoczone nawiasami, oraz jego warto zwracana.
Przykladowe ledzenie komendy ``cat /dev/null'' daje:
open("/dev/null", O_RDONLY) = 3
Do bldow (zwykle wartoci zwracane -1) dopisywany jest symbol errno i
napis bldu.
open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)
Sygnaly s drukowane jako symbol, oraz napis sygnalu. Fragment ledzenia
i przerwania komendy ``sleep 666'' to:
sigsuspend([] <unfinished ...>
--- SIGINT (Interrupt) ---
+++ killed by SIGINT +++
Argumenty s namitnie drukowane w formie symbolicznej. Przyklad ten
pokazuje dokonanie przekierowania ``>>xyzzy'':
open("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
Tutaj, wymienione trzy argumenty z open s zdekodowane poprzez rozbicie
argumentu flagi na jego bitowe skladniki i wydrukowanie ich
tradycyjnych nazw, oraz wartoci osemkowej praw. Cho tradycyjne, lub
natywne uywanie roni si od ANSI lub POSIX, to te ostatnie formy s
jednak preferowane. W niektorych wypadkach, wyjcie strace moe by
bardziej czytelne ni rodla.
Wskaniki struktury s dereferencjonowane, a czlonkowie s odpowiednio
wywietlani. We wszystkich wypadkach argumenty s formatowane w stylu C.
Na przyklad, istota komendy ``ls -l /dev/null'' jest przechwytywana
jako:
lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
Zauwa, jak zdereferencjonowano argument `struct stat' i jak wywietlono
kadego czlonka. Praktycznie, zauwa jak ostronie zostal zdekodowany
czlonek st_mode na jego mask bitow. Zauwa te, e w tym przykladzie,
pierwszym argumentem lstat jest wejcie wywolania systemowego, a drugim
jego wyjcie. Poniewa argumenty wyjciowe nie s modyfikowane jeli
wywolanie zawiedzie, argumenty nie zawsze mog zosta
zdereferencjonowane. Na przyklad proba ``ls -l'' na nieistniejcym pliku
da nastpujc lini:
lstat("/foo/bar", 0xb004) = -1 ENOENT (No such file or directory)
Wskaniki znakowe s dereferencjonowane i wywietlane jako napisy C.
Niedrukowalne znaki s reprezentowane w kodach eskejpowych. Drukowanych
jest tylko pierwszych rozmiarnapisu (domylnie 32) bajtow napisu; dlusze
napisy maj za zamykajcym cytatem dolczone wielokropki. Oto przyklad
``ls -l'', gdzie funkcja biblioteki getpwuid odczytuje plik z haslem:
read(3, "root::0:0:System Administrator:/"..., 1024) = 422
Podczas gdy struktury s notowane przy uyciu nawiasow klamrowych, zwykle
wskaniki i tablice s drukowane przy uyciu nawiasow kwadratowych, z
przecinkami oddzielajcymi elementy. Oto przyklad wywolania komendy
``id'' na systemie z dodatkowymi id grup:
getgroups(32, [100, 0]) = 2
Z drugiej strony, zbiory bitowe te s pokazywane w nawiasach
kwadratowych, lecz elementy s oddzielane tylko przez spacj. Oto
powloka, przygotowujca si do wywolania komendy zewntrznej:
sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
Drugi argument jest zbiorem bitowym dwoch sygnalow, SIGCHLD i SIGTTOU.
W niektorych wypadkach, zbiory bitowe s tak pelne, e bardziej sensowne
jest drukowanie nieustawionych elementow. W takiej sytuacji zbior jest
poprzedzony tyld, jak w nastpujcym przykladzie:
sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
Drugi argument wskazuje, e ustawiono caly zestaw sygnalow.
OPCJE
-c Zliczaj czas, wywolania i bldy dla kadego wywolania
systemowego i zglo na kocu raport.
-d Przeka na stderr wyjcie debuggowe strace.
-f led procesy potomne, tworzone prze obecnie ledzone
procesy, jako rezultat wywolania systemowego
fork(2). Nowe procesy s dolczane tak szybko, jak
szybko zostaje uzyskany ich pid (poprzez warto
zwracan fork(2) w procesie rodzicielskim). Oznacza
to, e takie dzieci mog na chwil by niekontrolowane
(szczegolnie w wypadku vfork(2)), a rodzic nie
zostanie znow wyshedulowany do dokoczenia wywolania
(v)fork(2). Jeli rodzic zdecyduje zaczeka (wait(2))
na dziecko, ktore obecnie jest ledzone, zostaje on
zawieszony a potomek si nie zakoczy.
-ff opcja -o nazwapliku bdzie dziala, ledzenie kadego
procesu jest zapisywane do nazwapliku.pid, gdzie pid
jest numerycznym identyfikatorem procesu.
-F Na SunOS 4.x opcja ta powoduje prob podania za
vforkami poprzez triki dynamicznego linkowania. W
przeciwnym wypadku, vforki nie bd ledzone, nawet z
podan opcj -f.
-h Wydrukuj podsumowanie pomocy.
-i Drukuj podczas wywolania systemowego wskanik
instrukcji.
-q Zahamuj komunikaty o przylczaniu, odlczaniu, etc.
Dzieje si to automatycznie gdy wyjcie jest
przekierowywane do pliku, a komenda jest wykonywana
bezporednio, zamiast przylczania.
-r Drukuj wzgldny timestamp podczas kadego wywolania
systemowego. Nagruwa to ronic czasu midzy pocztkami
kolejnych wywola systemowych.
-t Poprzed kad lini trace czasem dnia.
-tt Jeli podane dwukrotnie, wydrukowany czas wlcza
mikrosekundy.
-ttt Jeli podane trzykrotnie, wydrukowany czas wlcza
mikrosekundy, a prowadzca porcja bdzie zawiera liczb
sekund od epoki.
-T Poka czas spdzony na wywolaniach systemowych.
Nagrywa to ronice czasowe midzy pocztkiem i kocem
kadego wywolania systemowego.
-v Drukuj nieskrocone wersje wywola environment, stat,
termios, itp. Struktury te s wspolne w wywolaniach,
wic domylne zachowanie wywietla rozsdny podzbior
czlonkow. Gdy uzyjesz tej opcji, wywietlone zostanie
wszystko.
-V Wydrukuj numer wersji strace.
-x Drukuj wszystkie niedrukowalne napisy w formacie
szesnastkowym.
-xx Drukuj wszystkie napisy w formacie szesnastkowym.
-a kolumna Justuj zwracane wartoci w konkretnej kolumnie
(domylnie 40).
-e wyra Wyraenie kwalifikujce, okrelajce ktore zdarzenia
ledzi, lub jak je ledzi. Formatem wyraenia jest:
[kwalifikator=][!]warto1[,warto2]...
gdzie kwalifikator jest jednym z trace, abbrev,
verbose, raw, signal, read, lub write, a warto jest
zalenaym od kwalifikatora symbolem, lub liczb.
Domylnym kwalifikatorem jest trace (led). Uycie
wykrzyknika neguje zbior wartoci. Na przyklad -eopen
oznacza -e trace=open, co z kolei oznacza, by ledzi
tylko wywolania systemowe open. Odwrotnie,
-etrace=!open oznacza, by ledzi wszystkie wywolania
poza wywolaniami open. Dodatkowo, istniej specjalne
wartoci all (wszystko) i none (nic).
Zauwa, e niektore powloki uywaj wykrzyknika dla rozszerzenia
histori; nawet wewntrz cytowanych argumentow. Jeli tak bdzie,
musisz wyeskejpowa wykrzyknik odwrotnym ukonikiem.
-e trace=zbi'or
led tylko podany zbior wywola systemowych. Opcja -c jest
uyteczna dla okrelania, ktore wywolania systemowe mog by
uyteczne do ledzenia. Na przyklad
trace=open,close,read,write oznacza, by ledzi tylko te
cztery wywolania systemowe. Uwaaj z wyciganiem wnioskow o
ramce uytkownik/jdro jeli monitorujesz tylko podzbior
uywanych wywola systemowych. Domylnie, trace=all.
-e trace=file
led wszystkie wywolania systemowe, ktore bior nazw pliku
jako argument. Moesz myle o tym jak o skrocie dla -e
trace=open,stat,chmod,unlink,... co moe by uyteczne dla
sprawdzenia, ktore pliki s wane dla procesu. Co wicej,
uycie skrotu zapewni, e przypadkiem nie zapomnisz dolczy
wywolania w rodzaju lstat.
-e trace=process
led wszystkie wywolania systemowe, ktore zajmuj si
zarzdzaniem procesami. Jest to przydatne do obserwowania
krokow fork, wait i exec procesu.
-e trace=network
led wszystkie wywolania zwizane z sieci.
-e trace=signal
led wszystkie wywolania zwizane z sygnalami.
-e trace=ipc
led wszystkie wywolania zwizane z IPC.
-e abbrev=zbi'or
Skro wyjcie przez niedrukowanie kadego czlonka duych
struktur. Domylnie abbrev=all. Opcja -v ma efekt
abbrev=none.
-e verbose=zbi'or
Dereferencjuj struktury podanego zestawu wywola
systemowych. Domylnie jest verbose=all.
-e raw=zbi'or
Drukuj czyste, niezdekodowane argumenty podanych wywola
systemowych. Opcja te powoduje, e wszystkie argumenty s
drukowane szesnastkowo. Jest to najbardziej uyteczne,
jeli nie ufasz dekodowaniu, lub jeli potrzebujesz zna
wlaciwe wartoci numeryczne argumentow.
-e signal=zbi'or
led tylko podany zbior sygnalow. Domylnie jest
signal=all. Na przyklad signal=!SIGIO (lub signal=!io)
powoduje, e sygnaly SIGIO nie bd ledzone.
-e read=zbi'or
Dokonuj zrzutow szesnastkowych i ascii wszystkich danych
odczytywanych z deskryptorow podanych w zbiorze. Na
przyklad, by zobaczy co dzieje si na wejciu deskryptorow
3, 5, uyj: -e read=3,5. Zauwa, e jest to niezalene od
normalnego ledzenia wywolania read, ktore jest
kontrolowane opcj -e trace=read.
-e write=zbi'or
Dokonuj zrzutow szesnastkowych i ascii wszystkich danych
zapisywanych do deskryptorow podanych w zbiorze. Na
przyklad, by zobaczy co dzieje si na wyjciu deskryptorow
3, 5, uyj: -e write=3,5. Zauwa, e jest to niezalene od
normalnego ledzenia wywolania write, ktore jest
kontrolowane opcj -e trace=write.
-o nazwapliku
Zapisuj wyjcie ledzenia do pliku nazwapliku, a nie na
standardowy bld. Uyj nazwapliku.pid jeli uyto opcji -ff.
Jesli argument zaczyna si od `|' lub od `!', reszta
argumentu traktowana jest jak komenda i cale wyjcie jest
do niej przesylane. Jest to przydatne dla
przekierowywania wyjcia debuggowego, nie dotykajc
przekierowa normalnego wyjcia programu.
-O wydatki
Ustaw wydatki na ledzenie wywola systemowych na wydatki
mikrosekund. Jest to uyteczne dla przecienia domylnej
heurystyki dla zgadywania ile czasu jest spdzanego na
czystym mierzeniu podczas timingowaniu wywola systemowych
przy uyciu opcji -c. Dokladno heurystyki moe by ocenione
przez timingowanie danego programu bez ledzenia i
porownanie zebranego czasu wywola systemowych do
calkowitego, wydanego przy uyciu -c .
-p pid Podwie si do procesu o podanym identyfikatorze ID pid i
rozpocznij ledzenie. ledzenie moe by zakoczone w
dowolnym momencie przez przerwanie z klawiatury (CTRL-C).
strace odpowie przez odwieszenie si od ledzonego
procesu(ow), pozostawiajc go (je) w spokoju. Do
podwieszenia si do kolejnych 32 procesow, mona uywa wielu
opcji -p, jako uzupelnienie komendy komenda (ktora jest
opcjonalna, jeli podano przynajmniej jedn opcj -p).
-s wielkonapisu
Podaj maksymaln dlugo drukowanego napisu (domylnie 32).
Zauwa, e nazwy plikow nie s uwaane za napisy i zawsze s
drukowane w caloci.
-S sortuj
Sotruj wyjciowy histogram opcji -c wedlug podanego
kryterium. Legalnymi wartociami s time, calls, name, i
nothing (domylne to time).
-u uytkownik
Uruchom komend z userid i groupid, oraz dodatkowymi
grupami uytkownika. Opcja ta jest uyteczna tylko podczas
pracy z roota i umoliwia wlaciwe wywolanie binariow z
ustawionymi sgid/suid. Bez tej opcji, programy suid/sgid
s wywolywane bez efektywnych przywilejow.
INSTALACJA SETUID
Jeli strace jest zainstalowane z suid root, to uytkownik
wywolujcy bdzie mogl si podlczy i ledzi procesy dowolnego innego
uytkownika. Dodatkowo, programy suid i sgid bd wywolywane i
ledzonez wlaciwymi efektywnymi przywilejami. Poniewa robi to
powinni tylko zaufani uytkownicy z przywilejami roota, takie
instalowanie strace ma sens tylko, jeli uytkownicy uprawnieni do
jego wywolywania maj odpowiednie przywileje. Na przyklad
sensowne jest instalowanie specjalnej wersji strace z prawami
`rwsr-xr--', dla uytkownika root i grupy trace, gdzie czlonkowie
grupy trace s zaufanymi osobami. Jeli uywasz tej wlaciwoci,
pamitej by zainstalowa niesuidowan wersj strace dla zwyklych
luserow.
ZOBACZ TAKE
ptrace(2), proc(4), time(1), trace(1), truss(1)
UWAGI
Szkoda, e w systemach z bibliotekami dzielonym jest
produkowanych tyle mieci podczas ledzenia.
Jest dobrze myle o wejciach i wyjciach wywola systemowych jak o
przeplywie danych midzy przestrzeni uytkownika i jdra. Poniewa
przestrze uytkownika i przestrze jdra s oddzielone granic
ochrony adresow, mona czasem wyciga wnioski dedukcyjne o
zachowaniu procesu na podstawie wartoci wejcia i wyjcia.
W niektorych wypadkach wywolanie systemowe moe roni si od
udokumentowanego zachowania, lub mie inn nazw. Na przyklad na
systemach zgodnych z System V, rzeczywiste wywolanie time(2) nie
pobiera argumentu, a funkcja stat nazywana jest xstat i bierze
dodatkowy argument. Ronice te s normalne, lecz uczulone
charakterystyki interfejsu wywola systemowych s obslugiwane
przez wrappery biblioteki C.
Na niektorych platformach proces, ktory ma zalczone ledzenie
wywola systemowych z opcj -p otrzyma SIGSTOP. Sygnal ten moe
przerwa wywolanie systemowe, ktore nie jest restartowalne. Moe
to mie nieprzewidziane efekty na procesie, jeli proces nie
podejmuje dziala do restartowania wywolania systemowego.
B/LDY
Programy, ktore uywaj bitu setuid nie bd mialy efektywnych
uprawnie uytkownika podczas ledzenia.
ledzony proces ignoruje SIGSTOP (poza platformami SVR4).
ledzony proces, probujcy zablokowa SIGTRAP otrzyma SIGSTOP w
probie kontynuacji ledzenia.
ledzony program dziala powoli.
ledzone procesy, ktore schodz z komendy komenda mog zosta
pozostawione po sygnale przerwania (CTRL-C).
Pod Linuksem, ledzenie procesu init jest zabronione.
Opcja -i jest slabo wspierana.
HISTORIA
strace Oryginalny strace zostal napisany przez Paula Kranenburga
dla SunOS, ktory zostal zinspirowany narzdziem trace. Wersja
SunOS strace zostala przeniesiona na Linuksa i rozszerzona przez
Branko Lankestera, ktory rownie napisal wsparcie jdra Linuksa.
Mimo, e Paul w 1992 wypucil wersj 2.5 strace, prace Branko
opieraly si na strace 1.5 z 1991. W 1993 Rick Sladkey polczyl
zmiany strace 2.5 z SunOS ze zmianami wersji linuksowej, dodal
wiele wlaciwoci z truss'a z SVR4 i wydal wersj strace, ktora
dzialala na obydwu platformach. W 1994 Rick przeportowal strace
na SVR4 i Solaris, oraz napisal wsparcie automatycznej
konfiguracji. W 1995 przeportowal strace na Irixa i zmczyl si
pisaniem o sobie w trzeciej osobie.
PROBLEMY
Problemy zwizane ze strace powinny by zglaszane do obecnego
opiekuna strace, ktorym jest Rick Sladkey <jrs@world.std.com>.
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu
Tlumaczenia Manuali i moe nie by aktualne. W razie zauwaenia
ronic midzy powyszym opisem a rzeczywistym zachowaniem
opisywanego programu lub funkcji, prosimy o zapoznanie si z
oryginaln (angielsk) wersj strony podrcznika.
96/02/13 STRACE(1)