Konuyu Açan #1
strace ile Hata Teşhisi

Hata ayıklama sürecinde, uygulamaların sistem çağrılarını nasıl yaptığına dair ayrıntılı bir görünüm elde etmek, sorunun nerede başladığını anlamak için hayati olabilir. strace bu noktada en somut araçlardan biridir: bir süreç hangi sistem çağrılarını kullanıyor, hangi dosya veya ağ kaynaklarına erişim hatası veriyor ve hangi hatalar döndürüyor? Aşağıda, tipik senaryolarda nasıl kullanıldığına dair adım adım bir rehber sunuyorum.


1) Basit bir uygulamayı adımlama
  • Temel kullanım: strace örneğin

KOD
1strace ls -l

Bu, ls komutunun yürütülmesi sırasında yapılan tüm sistem çağrılarını satır satır gösterir. Çıktı, açılan dosyalar, okunan/yaratılan dosya adları ve dönen hatalar gibi detayları içerir.
  • Hangi hatayı hedefliyorsam o hatayı arayın: Örneğin dosya bulunamadı hatası için ERRNO kodları ve ilgili dosya yolunu not edin.


2) İzolasyon ve filtreleme
  • Belirli bir dosya veya dizin için izleme: strace -e trace=open,stat,read -f

Bu, sadece dosya sistemiyle ilgili çağrıları ve alt süreçleri izler, gürültüyü azaltır.
  • Belirli hata kodlarını görmek: strace -e trace=%file -o çıktı.txt ve çıkış dosyasında ENOENT, EACCES gibi hataları arayın.


3) Dosya erişim ve izin sorunları
  • Erişim izni hataları genelde EACCES veya ENOENT ile kendini gösterir. Hangi dosyaya erişilmeye çalışıldığını görmek için strace çıktısında open veya access çağrılarını inceleyin.
  • Çalışan kullanıcıyla dosya sahipliğiyle ilgili sorunlar için dosya izinlerini (ls -l) ve SELinux/AppArmor konfigürasyonlarını da kontrol edin. strace çıktısında path ve mod belirtimi size yol gösterecektir.


4) Dinamik yüklemeler ve kütüphaneler
  • LD_PRELOAD veya paylaşılan kütüphane yüklemeleriyle ilgili sorunlar için strace -e trace=process veya -f ile süreçler arasındaki yükleme adımlarını izleyin.
  • Paylaşılan kütüphaneler bulunamazsa, "openat" çağrısında ENOENT görürsünüz; sahte veya eksik kütüphanelerin yolunu PATH ve LD_LIBRARY_PATH ile karşılaştırın.


5) Ağ etkileşimleri ve socketler
  • Ağ çağrıları için -e trace=network veya -e trace=all ile socket(), connect(), sendto() gibi çağrıları göründürebilirsiniz. Bağlantı sorunlarında hedef adrese gerçekten ulaşılıp ulaşılmadığını, port ve protokol bilgisini doğrulayın.


6) Kalıntılar ve loglama entegrasyonu
  • Çıktıyı kaydetmek için strace -o dosya.txt kullanın. Ardından logu satır satır analiz edin; hatalı çağrılar genellikle hata kodu ile birlikte gösterilir.
  • Sorunlu süreçler için -f ile çocuk süreçleri de izlenebilir; bu, çok parçalı uygulamalarda kritik olabilir.


Kapanış
Strace, yalnızca hangi çağrının nerede başarısız olduğunu gösterir; problemi gidermek için hedef dosya, izinler ve yol mantığını sorgulamak gerekir. Özellikle dosya erişim hataları, yetki sorunları ve dinamik yüklemeler bu araçla netleşir. Bu yaklaşımı kendi projelerinizde hangi durumlarda kullanmayı düşünüyorsunuz ve hangi davranışları ilk adımda tespit ettiniz?

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 6, Üyeler: 6, Misafirler: 0)
Toplam: 6 (üyeler: 6, misafirler: 0)
0 alıntı seçildi