当前位置: 首页 > Linux

Linux神器strace的使用与实践

时间:2023-04-06 21:22:27 Linux

在Linux系统中,strace命令是一个集诊断、调试、统计为一体的工具。它可用于跟踪和调试程序,并可与其他命令结合使用。接下来,Linux系统调用小编就为大家详细介绍一下strace这个工具的使用和实践,一起来了解一下strace的操作实例吧。【场景】1、操作系统运维中,可能出现程序或系统命令运行失败,无法通过报错和日志定位问题根源。2.如何在没有内核或程序代码的情况下查看系统调用的过程。【说明】1.strace是一个非常有用的诊断、描述和调试工具。Linux系统管理员可以在没有源代码的情况下跟踪系统调用。2、strace显示进程的系统调用信息,可以帮助判断程序使用了哪个函数。当然,当系统出现问题时,可以通过strace来定位系统调用失败的原因。这是一个很好的定位系统问题的方法。【参数解析】1.strace安装方法:CentOS/EulerOS系统#yuminstallstraceUbuntu系统:#apt-getinstallstrace–y2。strace-c的常用参数和例子统计每次系统调用的执行时间、次数和错误次数。示例:在执行uptime时打印时间、数量、错误数和系统调用的系统调用#strace-cuptime-d显示strace本身在标准错误上的一些调试输出。-f跟踪由于fork(2)系统调用而由当前跟踪的进程创建的子进程。-i在系统调用时打印指令指针。-t跟踪的每一行都以时间为前缀。-tt如果给出两次,打印的时间将包括微秒。-ttt如果给出三次,打印的时间将包括微秒,前导部分将打印为从**开始的秒数。-T显示花费在系统调用上的时间。这将记录每个系统调用开始和结束之间的时间差。-v打印env、stats、termios等调用的未缩写版本。这些结构在调用中非常常见,因此默认行为显示结构成员的合理子集。使用此选项获取所有详细信息。-V打印strace的版本号。-eexpr修改要跟踪哪些事件或如何跟踪它们的限定表达式:-etrace=set仅跟踪指定的系统调用集。-c选项可用于确定哪些系统调用可能对跟踪有用。例如trace=open,close,read,write表示只跟踪这四个系统调用。-etrace=file跟踪所有以文件名作为参数的系统调用。示例:执行ls时打印与文件相关的系统调用。#strace-etrace=filels-etrace=process跟踪所有涉及进程管理的系统调用。这对于观察进程的分叉、等待和执行步骤很有用。-etrace=network跟踪所有与网络相关的系统调用。-etrace=signal跟踪所有与信号相关的系统调用。-etrace=ipc跟踪所有与IPC相关的系统调用。-ofilename将跟踪输出写入文件名而不是stderr。-ppid附加到具有进程IDpid的进程并开始跟踪。跟踪可以随时通过键盘中断信号(CTRL-C)终止。-S按指定标准对-c选项打印的直方图输出进行排序。示例:打印uname系统调用中调用次数的顺序#strace-fc-Scallsuname注:其他参数请参考man手册#manstrace【实践】以《定位系统故障解析域》为例namefailure”为例【问题现象】:无法访问外网域名,提示Nameorservicenotknow。并且已经检查过系统DNS配置文件/etc/resolv.conf是正确的,排除DNS解析失败。[问题分析]:目前无法确定系统解析域名失败的原因。这时候就需要使用strace查看系统调用过程。域名解析通常与系统读取文件有关,所以我们只查看打开文件的过程。具体命令如下:#strace-estrace=openpingwww.baidu.com如上图所示,如果在系统调用过程中,/usr/lib64/libnss_dns.so.2文件丢失,根本原因问题已确定为libnss_dns.so.2系统库文件丢失。【解决】:libnss_dns.so.2文件是由glibc-devel包生成的,重新安装包,请执行#yumreinstallglibc-devel点击关注,第一时间了解华为云的新鲜技术~