Provided by: manpages-pl_0.7-2_all bug

NAZWA

       strace - śledź wywołania systemowe i sygnały

SKŁADNIA

       strace [ -dffhiqrtttTvxx ] [ -akolumna ] [ -ewyraż ] ...  [ -oplik ] [ -ppid ] ...  [ -srozmiarnapisu ] [
       -uużytkownik ] [ komenda [ arg ...  ] ]

       strace -c [ -ewyraż ] ...  [ -Owydatki ] [ -Ssortuj ] [ komenda [ arg ...  ] ]

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       W  najprostszym  przypadku,  strace  wykonuje  zadaną  komendę  `komenda' aż się ona nie skończy.  Strace
       przechwytuje i nagrywa wywołania systemowe, dokonane przez proces, oraz sygnały, które do niego  dotarły.
       Nazwa  każdego  wywołania,  oraz jego argumenty, są wypisywane na wyjście standardowe błędu, lub do pliku
       podanego w opcji -o.

       strace jest użytecznym narzędziem diagnostyki,  debuggowania.  Administratorzy  systemów,  diagnostycy  i
       napotykacze  problemów  zauważą,  że  jest  nieocenione dla rozwiązywania problemów z programami, których
       źródeł nie ma wprost dostępnych. Strace bowiem  nie  potrzebuje  rekompilacji  aby  go  użyć.   Studenci,
       hackerzy  i  ogólnie zainteresowani zauważą, że z śledzenia wywołań systemowych można się wiele nauczyć o
       systemie. Programiści zauważą, że skoro wywołania systemowe i  sygnały  są  zdarzeniami  zachodzącymi  na
       interfejsie  użytkownik/jądro,  to  ich bliska obserwacja może być bardzo użyteczna do izolowania błędów,
       sprawdzania czystości i próbowania wyłapywania ulotnych warunków.

       Każda śledzona linia zawiera nazwę wywołania systemowego, za którą  następują  jego  argumenty,  otoczone
       nawiasami, oraz jego wartość zwracana.  Przykładowe śledzenie komendy ``cat /dev/null'' daje:

       open("/dev/null", O_RDONLY) = 3

       Do błędów (zwykle wartości zwracane -1) dopisywany jest symbol errno i napis błędu.

       open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)

       Sygnały  są  drukowane  jako  symbol, oraz napis sygnału. Fragment śledzenia i przerwania komendy ``sleep
       666'' to:

       sigsuspend([] <unfinished ...>
       --- SIGINT (Interrupt) ---
       +++ killed by SIGINT +++

       Argumenty są namiętnie drukowane w formie symbolicznej.  Przykład 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
       składniki i wydrukowanie ich tradycyjnych nazw,  oraz  wartości  ósemkowej  praw.  Choć  tradycyjne,  lub
       natywne  używanie  różni się od ANSI lub POSIX, to te ostatnie formy są jednak preferowane.  W niektórych
       wypadkach, wyjście strace może być bardziej czytelne niż źródła.

       Wskaźniki struktury są  dereferencjonowane,  a  członkowie  są  odpowiednio  wyświetlani.  We  wszystkich
       wypadkach  argumenty  są  formatowane  w  stylu  C.  Na przykład, 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 wyświetlono  każdego  członka.  Praktycznie,
       zauważ  jak  ostrożnie  został  zdekodowany  członek  st_mode  na jego maskę bitową. Zauważ też, że w tym
       przykładzie, pierwszym argumentem lstat jest  wejście  wywołania  systemowego,  a  drugim  jego  wyjście.
       Ponieważ  argumenty  wyjściowe  nie  są modyfikowane jeśli wywołanie zawiedzie, argumenty nie zawsze mogą
       zostać zdereferencjonowane. Na przykład próba ``ls -l'' na nieistniejącym pliku da następującą linię:

       lstat("/foo/bar", 0xb004) = -1 ENOENT (No such file or directory)

       Wskaźniki  znakowe  są  dereferencjonowane  i  wyświetlane  jako  napisy  C.   Niedrukowalne   znaki   są
       reprezentowane  w  kodach  eskejpowych.   Drukowanych  jest tylko pierwszych rozmiarnapisu (domyślnie 32)
       bajtów napisu; dłuższe napisy mają za zamykającym cytatem dołączone wielokropki.  Oto przykład ``ls -l'',
       gdzie funkcja biblioteki getpwuid odczytuje plik z hasłem:

       read(3, "root::0:0:System Administrator:/"..., 1024) = 422

       Podczas gdy struktury są notowane  przy  użyciu  nawiasów  klamrowych,  zwykłe  wskaźniki  i  tablice  są
       drukowane  przy  użyciu  nawiasów  kwadratowych,  z  przecinkami  oddzielającymi  elementy.  Oto przykład
       wywołania 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 powłoka, przygotowująca się do wywołania komendy zewnętrznej:

       sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0

       Drugi  argument  jest  zbiorem bitowym dwóch sygnałów, SIGCHLD i SIGTTOU.  W niektórych wypadkach, zbiory
       bitowe są tak pełne, że bardziej sensowne jest drukowanie nieustawionych  elementów.  W  takiej  sytuacji
       zbiór jest poprzedzony tyldą, jak w następującym przykładzie:

       sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0

       Drugi argument wskazuje, że ustawiono cały zestaw sygnałów.

OPCJE

       -c          Zliczaj czas, wywołania i błędy dla każdego wywołania systemowego i zgłoś na końcu raport.

       -d          Przekaż na stderr wyjście debuggowe strace.

       -f          Śledź  procesy  potomne,  tworzone  prze  obecnie  śledzone  procesy, jako rezultat wywołania
                   systemowego fork(2). Nowe procesy są dołączane 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 (szczególnie w wypadku vfork(2)), aż rodzic  nie  zostanie
                   znów  wyshedulowany  do  dokończenia  wywołania  (v)fork(2).  Jeśli rodzic zdecyduje zaczekać
                   (wait(2)) na dziecko, które obecnie jest śledzone, zostaje on zawieszony aż potomek  się  nie
                   zakończy.

       -ff         opcja   -o   nazwapliku   będzie  działać,  śledzenie  każdego  procesu  jest  zapisywane  do
                   nazwapliku.pid, gdzie pid jest numerycznym identyfikatorem procesu.

       -F          Na SunOS 4.x opcja ta  powoduje  próbę  podążania  za  vforkami  poprzez  triki  dynamicznego
                   linkowania. W przeciwnym wypadku, vforki nie będą śledzone, nawet z podaną opcją -f.

       -h          Wydrukuj podsumowanie pomocy.

       -i          Drukuj podczas wywołania systemowego wskaźnik instrukcji.

       -q          Zahamuj  komunikaty  o przyłączaniu, odłączaniu, etc. Dzieje się to automatycznie gdy wyjście
                   jest przekierowywane do pliku, a komenda jest wykonywana bezpośrednio, zamiast przyłączania.

       -r          Drukuj względny timestamp podczas każdego wywołania systemowego.  Nagruwa  to  różnicę  czasu
                   między początkami kolejnych wywołań systemowych.

       -t          Poprzedź każdą linię trace czasem dnia.

       -tt         Jeśli podane dwukrotnie, wydrukowany czas włącza mikrosekundy.

       -ttt        Jeśli  podane  trzykrotnie,  wydrukowany czas włącza mikrosekundy, a prowadząca porcja będzie
                   zawierać liczbę sekund od epoki.

       -T          Pokaż czas spędzony na wywołaniach systemowych. Nagrywa to różnice czasowe między  początkiem
                   i końcem każdego wywołania systemowego.

       -v          Drukuj nieskrócone wersje wywołań environment, stat, termios, itp.  Struktury te są wspólne w
                   wywołaniach,  więc  domyślne zachowanie wyświetla rozsądny podzbiór członków. Gdy uzyjesz tej
                   opcji, wyświetlone 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 wartości w konkretnej kolumnie (domyślnie 40).

       -e wyraż    Wyrażenie kwalifikujące, określające które zdarzenia śledzić, lub jak  je  śledzić.  Formatem
                   wyrażenia jest:
                   [kwalifikator=][!]wartość1[,wartość2]...
                   gdzie  kwalifikator  jest  jednym  z  trace, abbrev, verbose, raw, signal, read, lub write, a
                   wartość jest zależnaym od kwalifikatora symbolem, lub liczbą.  Domyślnym kwalifikatorem  jest
                   trace  (śledź).  Użycie  wykrzyknika  neguje  zbiór  wartości.  Na przykład -eopen oznacza -e
                   trace=open, co z kolei  oznacza,  by  śledzić  tylko  wywołania  systemowe  open.  Odwrotnie,
                   -etrace=!open  oznacza,  by  śledzić  wszystkie  wywołania  poza wywołaniami open. Dodatkowo,
                   istnieją specjalne wartości all (wszystko) i none (nic).

       Zauważ, że niektóre powłoki używają wykrzyknika  dla  rozszerzenia  histori;  nawet  wewnątrz  cytowanych
       argumentów. Jeśli tak będzie, musisz wyeskejpować wykrzyknik odwrotnym ukośnikiem.

       -e trace=zbiór
              Śledź  tylko  podany  zbiór  wywołań  systemowych.  Opcja  -c jest użyteczna dla określania, które
              wywołania systemowe mogą być  użyteczne  do  śledzenia.  Na  przykład  trace=open,close,read,write
              oznacza,  by  śledzić  tylko  te cztery wywołania systemowe. Uważaj z wyciąganiem wniosków o ramce
              użytkownik/jądro jeśli monitorujesz  tylko  podzbiór  używanych  wywołań  systemowych.  Domyślnie,
              trace=all.

       -e trace=file
              Śledź  wszystkie  wywołania systemowe, które biorą nazwę pliku jako argument.  Możesz myśleć o tym
              jak o skrócie dla -e trace=open,stat,chmod,unlink,...  co  może  być  użyteczne  dla  sprawdzenia,
              które  pliki są ważne dla procesu.  Co więcej, użycie skrótu zapewni, że przypadkiem nie zapomnisz
              dołączyć wywołania w rodzaju lstat.

       -e trace=process
              Śledź wszystkie wywołania systemowe, które zajmują się zarządzaniem procesami. Jest  to  przydatne
              do obserwowania kroków fork, wait i exec procesu.

       -e trace=network
              Śledź wszystkie wywołania związane z siecią.

       -e trace=signal
              Śledź wszystkie wywołania związane z sygnałami.

       -e trace=ipc
              Śledź wszystkie wywołania związane z IPC.

       -e abbrev=zbiór
              Skróć wyjście przez niedrukowanie każdego członka dużych struktur.  Domyślnie abbrev=all. Opcja -v
              ma efekt abbrev=none.

       -e verbose=zbiór
              Dereferencjuj struktury podanego zestawu wywołań systemowych. Domyślnie jest verbose=all.

       -e raw=zbiór
              Drukuj  czyste,  niezdekodowane  argumenty  podanych  wywołań  systemowych.  Opcja te powoduje, że
              wszystkie argumenty są drukowane szesnastkowo. Jest to  najbardziej  użyteczne,  jeśli  nie  ufasz
              dekodowaniu, lub jeśli potrzebujesz znać właściwe wartości numeryczne argumentów.

       -e signal=zbiór
              Śledź  tylko  podany  zbiór  sygnałów.  Domyślnie  jest signal=all. Na przykład signal=!SIGIO (lub
              signal=!io) powoduje, że sygnały SIGIO nie będą śledzone.

       -e read=zbiór
              Dokonuj zrzutów szesnastkowych i ascii wszystkich danych odczytywanych z deskryptorów  podanych  w
              zbiorze.  Na  przykład, by zobaczyć co dzieje się na wejściu deskryptorów 3, 5, użyj: -e read=3,5.
              Zauważ, że jest to niezależne od normalnego śledzenia  wywołania  read,  które  jest  kontrolowane
              opcją -e trace=read.

       -e write=zbiór
              Dokonuj  zrzutów  szesnastkowych i ascii wszystkich danych zapisywanych do deskryptorów podanych w
              zbiorze. Na przykład, by zobaczyć co dzieje się na wyjściu deskryptorów 3, 5, użyj: -e  write=3,5.
              Zauważ,  że  jest  to  niezależne od normalnego śledzenia wywołania write, które jest kontrolowane
              opcją -e trace=write.

       -o nazwapliku
              Zapisuj wyjście śledzenia do pliku nazwapliku, a nie na  standardowy  błąd.   Użyj  nazwapliku.pid
              jeśli  użyto opcji -ff.  Jesli argument zaczyna się od `|' lub od `!', reszta argumentu traktowana
              jest jak komenda i całe wyjście jest do niej przesyłane. Jest to  przydatne  dla  przekierowywania
              wyjścia debuggowego, nie dotykając przekierowań normalnego wyjścia programu.

       -O wydatki
              Ustaw  wydatki  na  śledzenie  wywołań  systemowych na wydatki mikrosekund.  Jest to użyteczne dla
              przeciążenia domyślnej heurystyki dla zgadywania ile czasu jest spędzanego  na  czystym  mierzeniu
              podczas  timingowaniu  wywołań  systemowych  przy użyciu opcji -c.  Dokładność heurystyki może być
              ocenione przez timingowanie danego programu bez śledzenia i  porównanie  zebranego  czasu  wywołań
              systemowych do całkowitego, wydanego przy użyciu -c .

       -p pid Podwieś  się  do  procesu o podanym identyfikatorze ID pid i rozpocznij śledzenie.  Śledzenie może
              być zakończone w dowolnym momencie przez przerwanie z klawiatury (CTRL-C).  strace  odpowie  przez
              odwieszenie  się  od śledzonego procesu(ów), pozostawiając go (je) w spokoju.  Do podwieszenia się
              do kolejnych 32 procesów, można używać wielu opcji -p, jako uzupełnienie  komendy  komenda  (która
              jest opcjonalna, jeśli podano przynajmniej jedną opcję -p).

       -s wielkośćnapisu
              Podaj maksymalną długość drukowanego napisu (domyślnie 32). Zauważ, że nazwy plików nie są uważane
              za napisy i zawsze są drukowane w całości.

       -S sortuj
              Sotruj  wyjściowy  histogram  opcji  -c  według podanego kryterium. Legalnymi wartościami są time,
              calls, name, i nothing (domyślne to time).

       -u użytkownik
              Uruchom komendę z userid i groupid, oraz dodatkowymi grupami użytkownika.  Opcja ta jest użyteczna
              tylko podczas pracy z roota i umożliwia właściwe wywołanie binariów z ustawionymi sgid/suid.   Bez
              tej opcji, programy suid/sgid są wywoływane bez efektywnych przywilejów.

INSTALACJA SETUID

       Jeśli strace jest zainstalowane z suid root, to użytkownik wywołujący będzie mógł się podłączyć i śledzić
       procesy  dowolnego  innego  użytkownika.   Dodatkowo,  programy  suid  i sgid będą wywoływane i śledzonez
       właściwymi efektywnymi przywilejami. Ponieważ robić to powinni tylko zaufani użytkownicy  z  przywilejami
       roota,  takie  instalowanie  strace  ma sens tylko, jeśli użytkownicy uprawnieni do jego wywoływania mają
       odpowiednie przywileje. Na przykład sensowne jest instalowanie specjalnej wersji strace z prawami  `rwsr-
       xr--',  dla  użytkownika  root  i  grupy  trace, gdzie członkowie grupy trace są zaufanymi osobami. Jeśli
       używasz tej właściwości, pamiętej by zainstalować niesuidowaną wersję strace dla zwykłych luserów.

ZOBACZ TAKŻE

       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  myśleć  o  wejściach  i  wyjściach  wywołań  systemowych  jak  o  przepływie  danych  między
       przestrzenią  użytkownika  i  jądra.  Ponieważ  przestrzeń  użytkownika  i przestrzeń jądra są oddzielone
       granicą ochrony adresów, można czasem wyciągać wnioski  dedukcyjne  o  zachowaniu  procesu  na  podstawie
       wartości wejścia i wyjścia.

       W  niektórych wypadkach wywołanie systemowe może różnić się od udokumentowanego zachowania, lub mieć inną
       nazwę. Na przykład na systemach zgodnych z System V, rzeczywiste wywołanie time(2) nie pobiera argumentu,
       a funkcja stat nazywana jest xstat i bierze dodatkowy argument.  Różnice te są  normalne,  lecz  uczulone
       charakterystyki interfejsu wywołań systemowych są obsługiwane przez wrappery biblioteki C.

       Na  niektórych  platformach  proces,  który ma załączone śledzenie wywołań systemowych z opcją -p otrzyma
       SIGSTOP.  Sygnał ten może przerwać wywołanie systemowe, które  nie  jest  restartowalne.   Może  to  mieć
       nieprzewidziane  efekty  na  procesie,  jeśli  proces  nie  podejmuje  działań do restartowania wywołania
       systemowego.

BŁĘDY

       Programy, które używają bitu setuid nie będą miały efektywnych uprawnień użytkownika podczas śledzenia.

       Śledzony proces ignoruje SIGSTOP (poza platformami SVR4).

       Śledzony proces, próbujący zablokować SIGTRAP otrzyma SIGSTOP w próbie kontynuacji śledzenia.

       Śledzony program działa powoli.

       Śledzone procesy, które schodzą z komendy komenda mogą zostać pozostawione po sygnale  przerwania  (CTRL-
       C).

       Pod Linuksem, śledzenie procesu init jest zabronione.

       Opcja -i jest słabo wspierana.

HISTORIA

       strace  Oryginalny  strace  został  napisany przez Paula Kranenburga dla SunOS, który został zinspirowany
       narzędziem trace.  Wersja SunOS strace  została  przeniesiona  na  Linuksa  i  rozszerzona  przez  Branko
       Lankestera,  który  również  napisał  wsparcie  jądra  Linuksa.  Mimo, że Paul w 1992 wypuścił wersję 2.5
       strace, prace Branko opierały się na strace 1.5 z 1991. W 1993 Rick Sladkey połączył zmiany strace 2.5  z
       SunOS  ze  zmianami  wersji  linuksowej,  dodał wiele właściwości z truss'a z SVR4 i wydał wersję strace,
       która działała na obydwu platformach. W 1994 Rick przeportował strace na SVR4  i  Solaris,  oraz  napisał
       wsparcie automatycznej konfiguracji. W 1995 przeportował strace na Irixa i zmęczył się pisaniem o sobie w
       trzeciej osobie.

PROBLEMY

       Problemy  związane  ze strace powinny być zgłaszane do obecnego opiekuna strace, którym jest Rick Sladkey
       <jrs@world.std.com>.

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W razie zauważenia różnic między powyższym opisem a rzeczywistym  zachowaniem  opisywanego  programu  lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 1 strace

       Prosimy   o   pomoc   w   aktualizacji   stron   man  -  więcej  informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.

                                                    96/02/13                                           STRACE(1)