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)