日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

跟蹤 UNIX 應(yīng)用程序的解決方案( 三 )


getcwd("/root", 1013)= 0 
resolvepath("/root/ageindays", "/root/ageindays", 1023) = 15 
xstat(2, "/root/ageindays", 0x08047880) = 0 
open("/var/ld/ld.config", O_RDONLY) = 3 
fxstat(2, 3, 0x08047760)= 0 
mmap(0x00000000, 144, PROT_READ, MAP_SHARED, 3, 0) = 0xFEFA0000 
close(3)= 0 
sysconfig(_CONFIG_PAGESIZE) = 4096 
xstat(2, "/usr/lib/libc.so.1", 0x08046FA0) = 0 
resolvepath("/usr/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14 
open("/usr/lib/libc.so.1", O_RDONLY)= 3 
mmap(0x00010000, 32768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 0) 
= 0xFEF90000 
mmap(0x00010000, 1413120, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) 
= 0xFEE30000 
mmap(0xFEE30000, 1302809, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 3, 0) 
= 0xFEE30000 
mmap(0xFEF7F000, 30862, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED| 
MAP_INITDATA, 3, 1306624) = 0xFEF7F000 
mmap(0xFEF87000, 4776, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANON, 
-1, 0) = 0xFEF87000 
munmap(0xFEF6F000, 65536)= 0 
memcntl(0xFEE30000, 187632, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0 
close(3)= 0 
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, 
-1, 0) 
= 0xFEE20000 
munmap(0xFEF90000, 32768)= 0 
getcontext(0x080475D0) 
getrlimit(RLIMIT_STACK, 0x080475C8) = 0 
getpid()= 15691 [15690] 
lwp_private(0, 1, 0xFEE22A00)= 0x000001C3 
setustack(0xFEE22A60) 
sysi86(SI86FPSTART, 0xFEF879BC, 0x0000133F, 0x00001F80) = 0x00000001 
ioctl(1, TCGETA, 0x08046C20)= 0 
fstat64(1, 0x08046B80) = 0 
You have been alive 10654 days 
write(1, " Y o uh a v eb e e".., 31) = 31 
You were born on 24/1/1980 which is a Thursday 
write(1, " Y o uw e r eb o r".., 47) = 47 
_exit(134511508)
在這兩個(gè)輸出中,每個(gè)輸出行對(duì)應(yīng)于應(yīng)用程序執(zhí)行的一個(gè)函數(shù)調(diào)用,其中顯示函數(shù)的參數(shù)和函數(shù)調(diào)用的返回值 。與調(diào)試示例不同,列出的每個(gè)函數(shù)調(diào)用都是系統(tǒng)或系統(tǒng)庫(kù)中的函數(shù),因此表示調(diào)用的函數(shù)的更低層接口 。例如,在應(yīng)用程序中可能使用 C 或 C中的 fpopen() 函數(shù)打開(kāi)文件,但是這個(gè)函數(shù)實(shí)際上是更低層的 open() 函數(shù)的包裝器 。
了解應(yīng)用程序正在執(zhí)行的操作并不需要了解每個(gè)函數(shù)的情況 。輸出中的許多行與操作系統(tǒng)為裝載和執(zhí)行程序所做的初始化相關(guān) 。這兩個(gè)跟蹤輸出的基本結(jié)構(gòu)是相同的:
調(diào)用 execve() 函數(shù)以啟動(dòng)一個(gè)新程序 。
裝載程序所需的庫(kù) 。在 Solaris 輸出中,首先使用 resolvepath() 尋找?guī)?,然后使?open() 打開(kāi)庫(kù) 。對(duì)于 Linux,使用 stat() 檢查庫(kù)是否存在,然后使用 open() 打開(kāi)它 。
為進(jìn)程保留和分配一些內(nèi)存 。其中一部分內(nèi)存是為應(yīng)用程序保留的堆??臻g,一部分用來(lái)保存程序,其他內(nèi)存保存程序使用的變量 。
最后,執(zhí)行程序,調(diào)用 write() 函數(shù)輸出年齡和生日信息 。
如果執(zhí)行跟蹤并希望了解每個(gè)步驟的具體情況,可以使用 man 命令訪問(wèn)每個(gè)函數(shù)的手冊(cè)頁(yè) 。
識(shí)別應(yīng)用程序啟動(dòng)問(wèn)題
在啟動(dòng)應(yīng)用程序時(shí)的一個(gè)典型問(wèn)題是,程序無(wú)法正確地初始化,但是在終止時(shí)給出一個(gè)不完整或?qū)е抡`解的消息 。對(duì)應(yīng)用程序運(yùn)行跟蹤常??梢越沂具@個(gè)問(wèn)題的根源 。例如,清單 5 顯示一個(gè)測(cè)試應(yīng)用程序運(yùn)行失敗了 。
清單 5. 應(yīng)用程序失敗
$ ./errnoacc 

推薦閱讀