strace是一個為開發人員和系統管理員設計的免費開源軟件,提供了一個用C語言實現的系統調用跟踪器,專門用於在GNU / Linux操作系統下運行。
該程序是一個非常有用的調試,指導和診斷工具,可以收集程序或進程生成的所有系統調用,並打印出一個跟踪。它是一個只能從控制台環境或通過終端模擬器應用程序使用的命令行程序。
該工具可供診斷人員,疑難解答人員以及希望獲得解決關閉源程序問題的無價值解決方案的系統管理員使用。它由Dmitry V. Levin,Roland McGrath和Wichert Akkerman撰寫。
命令行選項
與其他命令行軟件一樣,strace提供了多種命令行選項,使用戶可以輕鬆使用其所有功能和功能,以實現其任務。所有的命令行選項都可以通過運行“strace --help’命令。在最令人感興趣的命令行選項中,我們可以提到對每個系統調用的計數次數,調用和錯誤的支持,對系統調用延遲進行匯總的支持,對某個路徑的跟踪訪問的支持,支持調試輸出到stderr,以及支持將追踪程序作為獨立的孫子運行,而不是作為父母來運行。
此外,您將能夠將跟踪信息發送到特定文件而不是stderr,將跟踪系統調用的開銷設置為開銷usecs,為跟踪進程設置PID文件,限制打印字符串的長度來分類字符,運行命令作為處理setgid和/或setuid的用戶名,以及分離特定的系統調用。
Strace入門
strace只作為一個源代碼tarball發布,但是它可以很容易地從他們的主要軟件庫安裝在大量的Linux發行版上。要從源代碼安裝,只需從Softoware下載最新版本,將存檔保存到您選擇的位置並將其解壓。打開一個終端應用程序,進入提取的檔案文件的位置(例如cd /home/softoware/strace-4.9),運行./configure && make’命令來配置和編譯strace,然後執行“make install”命令為root或者“sudo make install”命令作為特權用戶來安裝系統範圍。
- 改進:
- 添加了-yy選項來打印與套接字描述符相關的協議和地址信息。
- 擴展“-e read = set”和“-e write = set”覆蓋sendmsg,recvmsg,sendmmsg和recvmmsg系統調用的選項。
- 實施ioctl命令的完整32位解碼(解決Debian bug#692913和Fedora bug#902788)。
- 在ia64上實施了PTRACE_GETREGS API支持
- 在mips上實施了PTRACE_GETREGS API支持
- 在s390 / s390x上實施了PTRACE_GETREGSET API支持。
- 實施getrandom和seccomp系統調用的解碼。
- 實施完整的64位能力集解碼。
- 執行所有prctl命令的解碼。
- 實現參數化ioctl命令的解碼。
- 執行evdev ioctl命令的解碼。
- 執行v4l ioctl命令的解碼。
- 實施了SG_IO v4 ioctl命令的解碼。
- 實現了FIFREEZE / FITHAW / FITRIM ioctl命令的解碼。
- 實現了FALLOC_FL_ * fallocate標誌的解碼。
- 在aarch64,x32和x86_64上執行rt_sigreturn信號掩碼的解碼。
- 增強的套接字解碼器支持藍牙套接字。
- 增強對未列出的ioctl命令的解碼。
- 增強了對getsockopt和setsockopt系統調用的解碼。
- 增強了對sysinfo syscall的解碼。
- 增強了對struct cmsghdr的解碼。
- 增強對等待狀態的解碼。
- 使用外部libaio.h增強了對非x86架構的aio支持。
- 將O_TMPFILE新增至識別的開放模式標誌清單。
- 更新解碼statfs系列調用中使用的文件系統類型常量列表。
- 更新了CAP_ *,PR_ *,PTRACE_ *,SCHED_ *,SO_ *,SOL_ *,SWAP_FLAG_ *和TFD_ *常量列表。
- 更新來自Linux 3.19的信號常數列表
- 從Linux 3.19更新了errno常量列表
- 更新了Linux 3.9的ioctl命令列表。
- 添加了新的系統調用條目以匹配Linux 3.19。
- 錯誤修正:
- 修復了系統調用號碼和相關信息(如係統調用參數數量,系統調用名稱和系統調用解碼器)之間映射的各種錯誤。
- 修正打印描述符,文件名,網絡接口名稱,struct utsname成員,BLK * ioctl命令的設備/卷名稱中的引用問題。
- 修正了uid_t / git_t解碼。
- 修正getdents / getdents64解碼器中潛在的出界問題。
- 修復了某些體系結構上潛在的開放標誌截斷問題。
- 修正了struct ifreq.ifr_name的解碼。
- 修正了SIOCSIFNAME ioctl命令的解碼。
- 修正了RENAME_ * renameat2標誌的解碼。
- 修正了UTIME_NOW / UTIME_OMIT timeval結構的解碼。
- 在某些體系結構上修復間接ipc子調用的解碼。
- 在32位架構上固定解碼fanotify_mark系統調用。
- 修正了64位架構上32位統計結構的解碼問題。
- 修正了64位架構上32位struct cmsghdr的解碼問題。
- 在64位架構上固定解碼32位preadv / pwritev偏移。
- 在ia64,ppc,ppc64,sparc,sparc64,mips和s390上修復sigreturn / rt_sigreturn信號掩碼的解碼。
- 固定指令指針輸出(-i選項)支持多個個性的架構。
- 修正了“-e read = set”的行為和“-e write = set”當讀寫組相交時。
- 修正了struct sigaction中沒有sa_restorer成員的系統。
- 使用uclibc和musl libc修正了版本。
- 可移植性: Linux內核> = 2.5.46是必需的。舊版本沒有體面的PTRACE_SETOPTIONS支持將無法正常工作。
- 在mips上,linux內核> = 2.6.15是必需的。沒有體面的PTRACE_GETREGS支持的舊版本將不起作用。
- 在s390和s390x上,linux內核> = 2.6.27是必需的。沒有體面的PTRACE_GETREGSET支持的舊版本將不起作用。
修復了內核釋放字符串解析(地址Debian bug#702309)。
- 這是一個穩定的版本,通常的錯誤修正,對新鮮Linux內核的增強支持,以及其他改進。
- 這是一個穩定版本,通常有缺陷修復,對於新鮮的Linux內核以及其他改進,包括使用Linux內核的顯式工具跟踪創建線程和子進程的克隆,fork和vfork系統調用的新方法。
- 改進:
- 實施新的linux系統調用解碼:inotify_init1,recvmmsg。
- 實現新的linux系統調用的基本解碼:preadv,pwritev,rt_tgsigqueueinfo,perf_event_open。
- 通過用先前為x86 / x86-64啟用的精心設計的解析器取代裸解碼器,增強了對非x86架構上最近添加的系統調用的解碼能力。
- 實現-C選項來組合常規和-c輸出。 (解決Debian bug#466196)
- 增強了對mbind和mremap系統調用的解碼。
- 增強了SOL_PACKET套接字選項解碼。
- 從linux 2.6.33重新生成ioctl名稱列表。
- 增加了TILE架構支持。
- 錯誤修正:
- 使用Linux內核頭文件2.6.32-rc5 +修正版本。 (解決Debian bug#560516和Fedora bug#539044)
- 修正了mips的構建。
- 修復了沒有struct statfs64的Linux系統的處理。
- 通過powerpc上的sigreturn修復報告信號掩碼。
- 修正選擇解碼器中潛在的堆棧緩衝區溢位。 (解決Fedora bug#556678)
- 更正了msgsnd間接ipccall解碼。
- 更正了64位系統調用的解碼。 (解決Debian bug#570603)
- 更正架構上的getsockopt解碼,其中sizeof(long)>的sizeof(int)的。 (解決Debian bug#494844)
- 糾正了epoll_pwait的解碼。 (解決Debian bug#513014)
- 更正了殺死線程的處理。
評論沒有發現