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)
- 更正了杀死线程的处理。
评论没有发现