如题,虽然可能很多地方都有类似介绍。
程序的配置文件在哪?
老生长叹,毕竟你不知道这个程序的配置文件是在用户根目录,还是systemd内。
因为一个程序有一百万种方法来记录它的配置文件在哪里(在手册页、网站上、–help等),但只有一种方法可以让它真正打开它(用系统调用!)。
比如我现在找一下apt的配置文件。
1 | strace -tf apt 2>&1|grep stat |
很明显可以看到apt.conf.d
被加入了加载列表,以及apt.conf
。
为什么会挂掉?
执行程序,却什么输出都没有,这是怎么回事?
很多时候你只需要运行strace -p PID
,看看当前运行的是什么系统调用。你甚至不需要看几百行的输出。
如果这个程序闪没了咋办?
试试这个!strace <command>
为什么很慢?
使用 strace 作为一种粗略的剖析工具strace -t <command>
会显示每次系统调用的时间戳,这样你就可以寻找大的漏洞,找到罪魁祸首。
或者用统计工具 strace -c <command>
为什么这个网络连接失败?
你可以通过DNS请求来查找域名,或者通过connect
系统调用来查找IP。
一般来说,当tcpdump
因为某些原因不能使用或者只是因为比较熟悉strace
时,就经常会使用strace
调试网络问题。
比如服务器curl ifconfig.me
一直不出结果。
这时候strace curl ifconfig.me
检查了一下。
1 | sendto(3, "GET HTTP://ifconfig.me/ HTTP/1.1"..., 172, MSG_NOSIGNAL, NULL, 0) = 172 |
发现一直超时,这样头绪会清晰一些,至少不是机器有问题。