Linux programokat kérni a
mag
hogy néhány dolgot nekik. Az
csík
parancs feltárja ezeket a rendszer kéri. Akkor használja őket, hogy megértsük, hogyan programok működnek és miért, néha nem.
A rendszert, és felhívja
Olyan okos, mint amilyenek lehetnének, számítógépes programok nem tud mindent a maguk számára. Azt kell, hogy kéri, hogy bizonyos funkciókat végre őket. Ezek a kérések megy a Linux kernel. Általában van egy könyvtár, vagy más szoftver interfész, amely a program kéri, és a könyvtár ezt követően a megfelelő kérelmet nevezett rendszert call-a kernel.
A lehetőség, hogy a rendszer kéri, hogy a program tette és milyen válaszok segíthet megérteni a belső működését programok érdeklik, vagy hogy írtál. Ez
mit
csík
csinál
. Ez segíthet a problémákat és megjelenés szűk.
Ez nem ugyanaz, mint a
hibakeresés kérelem
egy eszköz, mint
gdb
. A hibakereső program lehetővé teszi, hogy vizsgálja meg a belső működését a program futása. Ez lehetővé teszi, hogy át lehet lépni a logikája a program, és vizsgáljuk meg a memória és a változó értékeket. Összehasonlításképpen, mi
csík
csinál, elfog a rendszer hívás információt a program fut. Amikor a program befejeződik vezethető,
csík
felsorolja a rendszer hívás információt a terminál ablakban.
A rendszer kéri biztosítani mindenféle alacsony szintű funkciókat, így például írási és olvasási műveleteket fájlokat, megölve folyamatokat, és így tovább. Van egy lista több száz rendszer kéri a rendszerhívások man oldal .
ÖSSZEFÜGGŐ: Hibakeresés GDB: Első lépések
telepítése strace
Ha
csík
nincs telepítve a számítógépén, akkor telepítenie nagyon könnyen.
Ubuntu, használja ezt a parancsot:
sudo apt telepíteni strace
Fedora, írja be ezt a parancsot:
sudo DNF telepíteni strace
A Manjaro, a parancs:
sudo pacman -Sy strace
Első lépések a strace
Fogjuk használni egy kis programot bizonyítani
csík
. Ez nem sokat: Ez megnyit egy fájlt, és ír egy sor szöveget, hogy azt, és nincs semmilyen hiba ellenőrzésére is. Ez csak egy gyors hack, hogy van valami használható,
csík
.
#include & lt; stdio.h & gt;
int main (int argc, char argv []) {
// fájlkezelő
FILE * fileGeek;
// megnyitni egy fájlt a „strace_demo.txt”, vagy hozza létre
fileGeek = fopen ( "strace_demo.txt", "w");
// írj hozzá némi szöveget a fájlba
fprintf (fileGeek „Írja ezt a fájlt”);
// közel a fájlt
fclose (fileGeek);
// kilép a programból
vissza (0);
} // vége a fő
Mi mentette ezt egy fájlt a „Fájl-io.c”, és lefordítottam
gcc
egy futtatható úgynevezett
Stex
Elnevezett „
utca
verseny
volt
bőséges."
gcc -o Stex fájl-io.c
Hívjuk
csík
a parancssorból, és adja át a nevét az új végrehajtható azt a folyamatot, amit szeretnénk, hogy nyomon követhető. Mi is ugyanúgy nyomon követni a linuxos parancsok vagy bármilyen más bináris futtatható. Mi a mi kis program két okból.
Az első ok az, hogy
csík
a bőbeszédű. Nem lehet egy csomó kimenet. Ez nagyszerű, ha éppen
csík
a harag, de lehet elsöprő első. Van korlátozott
csík
kimenet mi kis programot. A második ok az, hogy a program korlátozott funkcionalitással, valamint a forráskód rövid és lényegre törő. Ez megkönnyíti, hogy melyik szakaszok a kimeneti utalnak a különböző részeit a belső működését a program.
strace ./stex
Mi lehet tisztán látni a
ír
rendszer hívás elküldésével a szöveg „Írja ezt a fájlt” a mi nyitott fájlt, és a
exit_group
rendszer hívást. Ez végződik minden menetet a kérelmet, és elküldi a visszatérési értéket vissza a héj.
Szűrése Output
Még az egyszerű demonstrációs programunkkal is sok kimenet van. Használhatjuk a
-e
(kifejezés) opció. Elmegyünk a rendszerhívás nevében, amelyet látni akarunk.
Strace -e írás ./stex
Jelentést küldhet több rendszerhívásról, ha vesszővel elválasztott listát adhat hozzá. A rendszerhívások listáján nem tartalmazzon semmilyen szóközt.
Strace -e bezárás, írjon ./stex
A kimenet küldése fájlba
A kimenet szűrésének előnye a kimenet szűrésének problémája is. Látod, mit kértél látni, de nem látsz semmit. És bizonyos, hogy a többi kiadási hasznosabb lehet az Ön számára, mint azok a dolgok, amit kért látni.
Néha kényelmesebb, hogy mindent megragadjon és keressen, és görgessen az egész eredményt. Így nem véletlenül semmit sem zárhat ki. Az
-o
(Kimenet) opció Lehetővé teszi a kimenetet a
csík
szöveges fájlba.
Strace -o trace-output.txt ./stex
Akkor is
használja a
Kevésbé
parancs
A lista és a rendszerhívások kereséséhez való görgetéséhez vagy más néven.
Kevesebb nyomelem.txt
Most már használhatja az összeset
Kevésbé
Keresési képességek a kimenet kivizsgálására.
ÖSSZEFÜGGŐ: Hogyan kell használni a kevesebb parancsot a Linuxon
Timestamps hozzáadása
Több különböző időbélyeget adhat hozzá a kimenethez. Az
-r
(Relatív időbélyegzők) Az opció hozzáteszi az időbélyegeket, amelyek az egyes egymást követő rendszerhívás kezdetét mutatják. Megjegyzendő, hogy ezek időben értékek közé tartozik a töltött idő a korábbi rendszer hívást, és bármi mást, ami a program csinál, mielőtt a következő rendszert hívást.
Strace -r ./stex
Az időbélyegek az egyes kimeneti sorok kezdetén jelennek meg.
Az egyes rendszerhívásokban töltött idő mennyiségének megtekintéséhez használja a
-T
(Syscall-Times) opció. Ez azt mutatja, hogy az egyes rendszerhíváson belül töltött idő időtartama.
Strace -t ./stex
Az időtartamok az egyes rendszerhívásvonal végén jelennek meg.
Ahhoz, hogy megnézze az időt, amikor az egyes rendszerhívást hívták, használja a
-tt
(Absolute Timestamps) opció. Ez mutatja a "fali óra" időt, microsecond felbontással.
Strace -tt ./stex
Az idők az egyes sorok kezdetén jelennek meg.
Futási folyamat nyomon követése
Ha a nyomon követni kívánt folyamat már fut, akkor még mindig csatolhatja
csík
neki. Ehhez ismernie kell a folyamatazonosítót. tudsz
használat
ps
val vel
grep
ezt megtalálja. Van Firefox futunk. Hogy megtudja a
firefox
folyamat, használhatjuk
ps
és
átmegy
grep
.
PS -E | Grep Firefox
Láthatjuk, hogy a folyamatazonosító 8483. A
-P
(Folyamatazonosító) lehetőség, hogy megmondja
csík
melyik eljárást kell csatolni. Ne feledje, hogy meg kell használnia
sudo
:
Sudo Strace -P 8483
Látni fog egy értesítést
csík
csatolta magát a folyamathoz, majd a rendszer nyomkövetési hívásai a szokásos módon jelennek meg.
Jelentés létrehozása
Az
-C
(csak összefoglaló) opció okok
csík
Jelentés nyomtatása. Táblázatot hoz létre a nyomkövető program által készített rendszerhívásokról.
Strace -c ./stex
Az oszlopok:
- % idő : A százalékos végrehajtási idő, hogy töltötte az egyes rendszerekben hívást.
- másodperc : A teljes idő, másodpercben kifejezve és ezredmásodperc töltött minden egyes rendszer hívást.
- usecs / hívás : Az az átlagos idő mikromásodpercben töltött minden egyes rendszer hívást.
- hívások : Az a szám, ahányszor minden rendszer hívás kivégezték.
- hibák : A meghibásodások számát minden egyes rendszer hívást.
- syscall : A rendszer neve hívást.
Ezek az értékek nullák triviális programok végrehajtását és megszünteti gyorsan. Valós értékeket mutat programok csinálni valami értelmes, mint a bemutató alkalmazás.
Mély betekintést, Könnyen
Az
csík
kimenet meg tudja mutatni, hogy melyik rendszer hívásokat tesznek, melyek tesznek többször, és mennyi végrehajtási idő költik belül kernel oldali kódot. Ez nagyszerű információkat. Gyakran előfordul, hogy amikor megpróbálja megérteni, mi folyik benne a kódot, akkor könnyű elfelejteni, hogy a bináris kölcsönhatásban szinte nonstop a kernel, hogy végre sok a funkciókat.
Használva
csík
Látod a teljes képet.