Linux programları
çekirdek
Onlar için bazı şeyler yapmak için. NS
atlatmak
Komut bu sistem çağrılarını ortaya koyuyor. Programların nasıl çalıştığını ve neden bazen yapmadıklarını anlamak için bunları kullanabilirsiniz.
Çekirdek ve sistem çağrıları
Olabilecekleri kadar akıllı olarak, bilgisayar programları kendileri için her şeyi yapamaz. Onlar için belirli fonksiyonların yapılması talepleri yapmaları gerekir. Bu talepler Linux çekirdeğine gidiyor. Tipik olarak, programın çağrılarının ve kütüphanenin daha sonra bir sistem çağrısı olarak adlandırılan bir sistem çağrısı denilen bir kütüphane veya başka bir yazılım arayüzü var.
Sistemin bir programın yaptığını ve yanıtların ne olduğunu, sizi ilgilendiren veya yazdığınız programların iç işlerini anlamanıza yardımcı olabilir. Bu
ne
atlatmak
yapmak
. Sorunları gidermeye ve darboğazları aramaya yardımcı olabilir.
Bu aynı değil
Bir uygulamayı hata ayıklama
Gibi bir araçla
gdb
. Hata ayıklama programı, bir programın iç çalışmasını çalıştırdığı gibi araştırmanıza olanak sağlar. Programınızın mantığından geçmenize ve hafıza ve değişken değerleri incelemenizi sağlar. Karşılaştırma ile ne
atlatmak
Program çalıştığı için sistem arama bilgilerini yakalayın. İzlenen program sona erdiğinde,
atlatmak
Sistem çağrısı bilgilerini terminal penceresine listeler.
Sistem aramaları, dosyalar, öldürme işlemleri vb. Okuma ve yazma işlemleri gibi her türlü düşük seviyeli işlevselliği sağlar. Yüzlerce sistem çağrısının bir listesi var. syscalls adam sayfası .
İLGİLİ: GDB ile hata ayıklama: Başlarken
Strace yükleme
Eğer
atlatmak
Bilgisayarınıza zaten yüklenmemiş, çok kolay yükleyebilirsiniz.
Ubuntu'da, bu komutu kullanın:
Sudo Apt Kurulumu Strace
Fedora'da, bu komutu yazın:
Sudo DNF Yükleme Strace
Manjaro'da, komut:
Sudo Pacman -Sy Strace
Strace ile ilk adımlar
Göstermek için küçük bir program kullanacağız.
atlatmak
. Çok fazla yapmaz: Bir dosyayı açar ve bir metin satırını yazar ve içinde herhangi bir hata kontrolü yoktur. Bu sadece hızlı bir hack, böylece kullanacak bir şeyimiz var.
atlatmak
.
#include & lt; stdio.h & gt;
int ana (int argc, char argv []) {
// Dosya Kolu
Dosya * filegeek;
// "strace_demo.txt" adlı bir dosyayı açın veya oluşturun
filegeek = fopen ("strace_demo.txt", "w");
// dosyaya biraz metin yaz
fprintf (filegeek, "bunu dosyaya yaz");
// dosyayı kapat
fclose (filegeek);
// Programdan Çık
dönüş (0);
} // Ana'nın sonu
Bunu "dosya-io.c" adlı bir dosyaya kaydettik ve onunla derledik.
gcc
çalıştırılabilir bir denilen
stebex
, adına "
NS
yarış
eski
Geniş. "
gcc -o stex dosya-io.c
Aramacağız
atlatmak
Komut satırından ve yeni yürütmemizin adını izlemek istediğimiz süreç olarak adlandırın. Linux komutlarından veya diğer ikili çalıştırılabilirlerin herhangi birini kolayca izleyebiliriz. Tiny programımızı iki nedenden dolayı kullanıyoruz.
İlk neden budur
atlatmak
verbose. Çok fazla çıktı olabilir. Kullandığında bu harika
atlatmak
Öfkeyle, ancak ilk başta ezici olabilir. Sınırlı var
atlatmak
Küçük programımız için çıktı. İkinci neden, programımızın sınırlı işlevselliğe sahip olması ve kaynak kodun kısa ve basit olmasıdır. Bu, çıktının hangi bölümlerinin programın iç çalışmalarının farklı bölümlerine atıfta bulunduğunu belirlemeyi kolaylaştırır.
Strace ./stexГ67]
![]()
Açıkça görebiliriz
yazı yazmak"Bunu dosyaya yaz" metnini gönderen sistem çağrısı açılan dosyamıza veexit_groupsistem çağrısı. Bu, uygulamadaki tüm iplikleri sonlandırır ve kabuğa geri dönüş değeri gönderir.
![]()
Çıkışın filtrelenmesi
Basit gösteri programımızda bile, çok fazla çıktı var. Kullanabiliriz
-e(ifade) seçeneği. Görmek istediğimiz sistem çağrısının adını geçeceğiz.Strace -e. /StexГ67 yaz.
![]()
Birden fazla sistem çağrısını virgülle ayrılmış bir liste olarak ekleyerek rapor edebilirsiniz. Sistem aramaları listesinde herhangi bir boşluk dahil etmeyin.
Strace -e Kapat, yaz ./stexГ67]
![]()
Çıktıyı bir dosyaya gönderme
Çıktıyı filtrelemenin faydası da çıkışı filtreleme ile ilgili bir sorundur. Görmek istediğini görüyorsun, ama başka bir şey görmüyorsun. Ve diğer çıktıların bazıları sizin için görmenizi istediğiniz şeylerden daha faydalı olabilir.
Bazen, her şeyi yakalamak ve arama yapmak ve tüm sonuç kümesi boyunca kaydırmak daha uygundur. Bu şekilde, yanlışlıkla önemli bir şeyi dışlamazsınız. NS
-Ö(Çıktı) seçeneği, çıktıyı bir göndermenize izin verir.atlatmakbir metin dosyasına oturum.Strace -o trace-çıkış.txt ./stexГ67]
![]()
O zaman yapabilirsiniz kullan
azemretmek Listeyi kaydırmak ve sistem çağrıları aramak-veya başka bir şeye göre.daha az trace-çıkış.txt
![]()
Şimdi hepsini kullanabilirsin
azÇıktıyı araştırmak için arama yetenekleri.
![]()
İLGİLİ: Linux'taki daha az komut nasıl kullanılır?
Zaman damgaları ekleme
Çıkışa birkaç farklı zaman damgası ekleyebilirsiniz. NS
-r(Göreceli zaman damgaları) seçeneği, her ardışık sistem çağrısının başlangıcı arasındaki zaman farkını gösteren zaman damgaları ekler. Bu zaman değerlerinin önceki sistem çağrısında geçirilen zamanı ve programın bir sonraki sistem çağrısı yapmadan önce yaptığı her şeyi içereceğini unutmayın.strace -r ./stexГ67]
![]()
Zaman damgaları, her çıktı satırının başında görüntülenir.
![]()
Her sistem çağrısında harcanan zaman miktarını görmek için kullanın
-T(Syscall-Times) seçeneği. Bu, her sistem çağrısında geçirilen zamanın süresini gösterir.Strace -t ./stexГ67]
![]()
Zaman süreleri, her sistem arama hattının sonunda gösterilir.
![]()
Her sistem çağrısının çağrıldığı zamanı görmek için kullanın
-tt(mutlak zaman damgaları) seçeneği. Bu, bir mikrosekond çözünürlüğüne sahip "duvar saati" zamanını gösterir.strace -tt ./stexГ67]
![]()
Zamanlar her satırın başında görüntülenir.
![]()
Koşu sürecinin izlenmesi
İzlemek istediğiniz işlem zaten çalışıyorsa, yine de ekleyebilirsiniz
atlatmakona. Bunu yapmak için, işlem kimliğini bilmeniz gerekir. Yapabilirsiniz kullanmakpsile birliktegrepBunu bulmak için. Firefox'u çalıştırıyoruz. Kimliğini bulmak içinfirefoxişlem, kullanabilirizpsve borulamakgrep.PS -E | GREP Firefox
![]()
İşlem kimliğinin 8483 olduğunu görebiliriz.
-P(İşlem Kimliği) Söyleme seçeneğiatlatmakhangi işlemi eklemek için. Kullanmanız Gereken NotSudo:Sudo Strace -P 8483
![]()
Bir bildirim göreceksiniz ki
atlatmakKendini sürece ekledi ve ardından sistem izleme aramaları terminal penceresinde her zamanki gibi gösterilecektir.
![]()
Rapor Oluşturma
NS
-C(Yalnızca Özet) Seçenek NedenleratlatmakBir rapor yazdırmak için. İzlenen program tarafından yapılan sistem çağrıları hakkında bilgi için bir tablo oluşturur.STRACE -C ./STEXГ67]
![]()
Sütunlar şunlardır:
- % zaman : Her sistem çağrısında geçirilen yürütme süresinin yüzdesi.
- saniye : Saniyeler içinde ifade edilen toplam süre ve her sistem çağrısında geçirilen mikrosaniye.
- USECS / ARAMA : Her sistem çağrısında geçirilen mikrosaniyede ortalama süre.
- aramalar : Her sistem çağrısının yürütüldüğü zaman sayısı.
- hatalar : Her sistem araması için başarısızlık sayısı.
- syscall : Sistem çağrısının adı.
Bu değerler, hızlı bir şekilde yürüten ve sonlandıran önemsiz programlar için sıfırlar gösterecektir. Gerçek dünya değerleri, gösteri başvurumuzdan daha anlamlı bir şey yapan programlar için gösterilmektedir.
Derin görüşler, kolayca
NS
atlatmak
Çıktı, hangi sistem çağrılarının yapıldığını, hangilerinin tekrar tekrar yapıldığını ve çekirdek tarafı kodunda ne kadar yürütme süresinin harcandığını gösterebilir. Bu harika bilgiler. Genellikle, kodunuzun içinde neler olup bittiğini anlamaya çalıştığınızda, ikili sizin işlevlerinin çoğunu gerçekleştirmek için çekirdeği çekirdekle etkileşime girmeyi unutmak kolaydır.
Kullanarak
atlatmak
, tam resmin tamamını görüyorsunuz.