Welcome, Guest. Please login or register.
Did you miss your activation email?
08 February, 2012, 10:06:05 am
Home Help Search Login Register

Lazarus and FreePascal

Erişim

Stats

Members
  • Total Members: 1208
  • Latest: yuksek
Stats
  • Total Posts: 326
  • Total Topics: 83
  • Online Today: 10
  • Online Ever: 53
  • (22 October, 2011, 06:01:43 pm)
Users Online
Users: 0
Guests: 11
Total: 11
Oct 16 2009 STRACE Kullanımı
written by alivardar | 3483 Views | Rating: (1 rates)
Dökümanlar
M.Ali VARDAR 2006 Strace Nasıl?
Strace Kullanımı
BSD tarzı bir lisans ile dağıtılmaktadır. İlk olarak SunOS içinde bulunan
trace adlı uygulamadan esinlenerek yazılmıştır. Derlenmiş olan
uygulamalar içinde çalışma zamanında oluşan hataları anlamak
amacıyla yazılmış bir kaynak kod takip uygulamasıdır. Uygulama
kodlarının hangi zamanda hangi kodun işlediğinin bilgisini bizlere
verir. Bunu yaparken aynı zamanda sistem içine erişilen dosyaların ve
kullanılan kütüphaneler hakkında da bilgiler verir. Strace bir çok
dağıtımda hazır olarak gelmeyebilir. Ancak hemen hemen her dağıtımın
geliştirme kitaplıkları içinde bulunmaktadır.
Strace ile beraber kullanmak için en basit hali ile bir uygulama yazalım.
#include
int main()
{
printf("ornek uygulama");
}
Uygulamayı derleyelim. Uygulama adı olarak ilk kullanılacaktır.
gcc o
ilk ilk.c
Kullanım parametresi kullanması olmadan en basit ile strace
uygulamamız ile birlikte çalıştıralım.
strace ./ilk
Karşımıza aşağıdaki şekilde bir yazı üretecektir. Bu yazının ne olduğunu
anlamaya çalışalım.
execve("./ilk", ["./ilk"], [/* 29 vars */]) = 0
uname({sys="Linux", node="avardar", ...}) = 0
brk(0) = 0x804a000
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 1,
0) =
0xb7efb000
access("/etc/ld.so.nohwcap", F_OK) = 1
ENOENT (No such file or directory)
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 1,
0) =
0xb7efa000
access("/etc/ld.so.preload", R_OK) = 1
ENOENT (No such file or directory)
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 1,
0) =
0xb7ef9000
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=75499, ...}) = 0
M.Ali VARDAR 2006 Strace Nasıl?
old_mmap(NULL, 75499, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7ee6000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = 1
ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220O\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1232784, ...}) = 0
old_mmap(NULL, 1238972, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb7db7000
old_mmap(0xb7edc000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|
MAP_DENYWRITE, 3, 0x125000) = 0xb7edc000
old_mmap(0xb7ee3000, 10172, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|
MAP_ANONYMOUS, 1,
0) = 0xb7ee3000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 1,
0) =
0xb7db6000
set_thread_area({entry_number:1
>
6, base_addr:0xb7db66c0, limit:1048575,
seg_32bit:1, contents:0, read_exec_only:0, l
imit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7ee6000, 75499) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 1,
0) =
0xb7ef8000
write(1, "ornek uygulama", 14ornek uygulama) = 14
munmap(0xb7ef8000, 4096) = 0
exit_group(14) = ?
Strace çıktısı içinde execve() çağrısı çalıştırılan dosyanın adını
vermektedir. uname() sistem adı ve tipi bilgisini almaktadır. Uygulama
bu bilgiler sonrasında sistem belleği durumu ile ilgili çağrıları
kullanmaktadır. write() çağrısı ile birlikte ekrana istediğimiz yazıyı
yazmaktadır. Daha sonra hafıza alanı boşaltılıp uygulamadan
çıkılmaktadır. Bu oldukça karmaşık gözüken bir yapı zaman içinde size
son derece basit ve kullanışlı gelecektir. Özellikle başka birisi
tarafından yazılmış olan bir uygulamanın eriştiği sistem çağrılarını ve
kullandığı dosyaları son derece kolay bir şekilde gözlemleyebilirsiniz.
Zaman için bilmediğiniz çağrıları araştırarak sistem hakkında daha
fazla bilgi sahibi olmanızı artıracaktır. Uygulamalar nasıl çalışır
oyununa bir başka açıdan bakalım ve yazılmış diğer bir uygulamanın
sonlanmadan, bir kullanıcıdan yanıt beklediğini düşünelim. Buna göre
basit bir örnek yazalım.
#include
int main()
{
char c;
c=getchar();
printf("%c\n",c);
}
Uygulamayı ikinci adı ile derleyelim.
gcc o
ikici ikinci.c
M.Ali VARDAR 2006 Strace Nasıl?
Bu uygulama kullanıcıdan bir karakter veriyi alır ve ekrana basar.
Uygulamayı getchar() fonksiyonu sırasında bekletmektedir.
strace ./ikinci yazarak çalıştırınca, çıktı olarak karşımıza şu şekilde
bir duraklama mesajı ile gelecektir. Bu anda uygulama içinde bulunan
bilgi girişi sizden beklenmektedir.
........
read(0,
Bu gibi durumlarda özellikle ncurses tabanlı uygulamalar yazıldığı
zamanlarda kullanım ile ilgili sıkıntılar yaşanmasına neden olabilir.
Ekran son derece karışık olabilir çünkü uygulama çıktısı ile birlikte
strace çıktısı konsol ekranında aynı gösterileceği için karışıklık
yaratacaktır. Bu amaçla uygulamanın çıktısını bir text dosya içine kayıt
etme şansımız vardır.
strace o
cikti.txt ./ikinci
Komutunun bize faydası çalışan uygulamanın normal bir şekilde
çalışmasını engellemeyecektir. Aynı zamanda ilerde çıktıları okumak
veya atladığımız alanları görmek için tekrar tekrar çalıştırmak zorunda
bırakmayacaktır. Sadece istediğimiz çağrıları görebilmek amacıyla -e
parametresi kullanılır. Aşağıdaki örneğe göre sadece open çağrıları
listelenecektir.
strace eopen
./ilk
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
Ayrıca parametre olarak e
trace=open,close,read biçiminde
kullanarak birden fazla çağrıyı gözlemleyebiliriz. Örnek kullanım olarak
aşağıya bakılabilir.
strace e
trace=open,close ./ilk
open("/etc/ld.so.cache", O_RDONLY) = 3
close(3) = 0
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
close(3) = 0
Strace aynı zamanda çalışan süreçleri de yakalayabilir. Bu amaçla
kendimize bir çalışan uygulama seçelim.
M.Ali VARDAR 2006 Strace Nasıl?
root@avardar:~# ps aux | grep gaim
root 9697 0.3 3.0 42272 15920 ? S 09:20 0:35 gaim
Kobay uygulama olarak ben nasıl çalıştığını görmek istediğim gaim
isimli haberleşme uygulamasını seçtim.
#strace p
9697
yazarak çalışan uygulamanın sürekli olarak neler yaptığı
gözlemlenebilir.
Sonuç olarak strace hata ayıklama ve sorunların anlaşılmasında bizler
için son derece değerli bir uygulamadır. Bu uygulama aynı zamanda
kendini geliştirmek isteyenler için son derece yararlıdır. Bu aracı bir
oyun makinesi haline getirmek sistemin nasıl işlediği hakkında bilgi
sahibi olmak sizlerin elindedir. Mesela strace ile ls ve date
komutlarının nasıl işlediğini görmek bir çok geliştirici için heyecan
verici olabilir.
M.Ali VARDAR
ali@linuxprogramlama.com
Bu yazının son şeklini www.linuxprogramlama.com adresinden temin
edebilirsiniz.
Yasal Açıklama:
Bu belgenin, [GCC Kullanımı] 1.0 sürümünün telif hakkı © 2005 M. Ali Vardar'a aittir. Bu
belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür
Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak
kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını
http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.
BU BELGE "ÜCRETSİZ" OLARAK RUHSATLANDIĞI İÇİN, İÇERDİĞİ BİLGİLER İÇİN
İLGİLİ KANUNLARIN İZİN VERDİĞİ ÖLÇÜDE HERHANGİ BİR GARANTİ
VERİLMEMEKTEDİR. AKSİ YAZILI OLARAK BELİRTİLMEDİĞİ MÜDDETÇE TELİF
HAKKI SAHİPLERİ VE/VEYA BAŞKA ŞAHISLAR BELGEYİ "OLDUĞU GİBİ", AŞİKAR
VEYA ZIMNEN, SATILABİLİRLİĞİ VEYA HERHANGİ BİR AMACA UYGUNLUĞU DA
DAHİL OLMAK ÜZERE HİÇBİR GARANTİ VERMEKSİZİN DAĞITMAKTADIRLAR.
BİLGİNİN KALİTESİ İLE İLGİLİ TÜM SORUNLAR SİZE AİTTİR. HERHANGİ BİR
HATALI BİLGİDEN DOLAYI DOĞABİLECEK OLAN BÜTÜN SERVİS, TAMİR VEYA
DÜZELTME MASRAFLARI SİZE AİTTİR. İLGİLİ KANUNUN İCBAR ETTİĞİ
DURUMLAR VEYA YAZILI ANLAŞMA HARİCİNDE HERHANGİ BİR ŞEKİLDE TELİF
HAKKI SAHİBİ VEYA YUKARIDA İZİN VERİLDİĞİ ŞEKİLDE BELGEYİ DEĞİŞTİREN
VEYA YENİDEN DAĞITAN HERHANGİ BİR KİŞİ, BİLGİNİN KULLANIMI VEYA
KULLANILAMAMASI (VEYA VERİ KAYBI OLUŞMASI, VERİNİN YANLIŞ HALE
GELMESİ, SİZİN VEYA ÜÇÜNCÜ ŞAHISLARIN ZARARA UĞRAMASI VEYA
BİLGİLERİN BAŞKA BİLGİLERLE UYUMSUZ OLMASI) YÜZÜNDEN OLUŞAN
GENEL, ÖZEL, DOĞRUDAN YA DA DOLAYLI HERHANGİ BİR ZARARDAN, BÖYLE
M.Ali VARDAR 2006 Strace Nasıl?
BİR TAZMİNAT TALEBİ TELİF HAKKI SAHİBİ VEYA İLGİLİ KİŞİYE BİLDİRİLMİŞ
OLSA DAHİ, SORUMLU DEĞİLDİR.
Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen
herhangi bir terim, bir ticari isim ya da kuruma itibar kazandırma olarak
algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği
anlamında görülmemelidir.
Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

Forum / Destek

GPL Applications

TinyPortal v1.0 beta 4 © Bloc


Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!