查看程序需要的资源的命令

记载一些高级命令

strace

这个命令是用来进行查看命令的系统调用的。

常用的参数

1
strace -c /usr/bin/ls

-c告诉我们调用了那些系统函数,调用次数多少,消耗了多少时间等等,这些信息对我们分析一个程序来说是非常有用的。

1
strace -p 1234 

-p使得我们可以使用进程号追踪一个进程。

1
strace -tt ls

使用-t选项,可以在每行的输出之前添加时间戳。-tt选项可以展示微秒级别的时间戳。

1
strace -e open cat dead.letter

strace命令的-e选项仅仅被用来展示特定的系统调用(例如,open,write等等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-e trace=set 只跟踪指定的系统调用,例如: -e trace=open,close,rean,write 表示只跟踪这四个系统调用,默认的为 set=all 。

-e trace=file 只跟踪有关文件操作的系统调用。

-e trace=process 只跟踪有关进程控制的系统调用。

-e trace=network 跟踪与网络有关的所有系统调用。

-e strace=signal 跟踪所有与信号有关的系统调用。

-e trace=ipc 跟踪所有与进程通讯有关的系统调用。

-e raw=set 将指定的系统调用的参数以十六进制显示。

-e signal=se t 指定跟踪的系统信号。默认为all(所有信号)。如 signal=!SIGIO 或者 signal=!io ,表示不跟踪 SIGIO 信号。

-e read=set 输出从指定文件中读出的数据。

-e write=set 输出写入到指定文件中的数据。

参考资料

https://doc.embedfire.com/linux/imx6/base/zh/latest/linux_debug/strace.html

ltrace

这个命令是用来查看命令的库函数调用的。

常用的参数用法

1
ltrace -S /usr/bin/ls

-S是查看系统调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-a 对齐具体某个列的返回值。
-c 计算时间和调用,并在程序退出时打印摘要。
-C 解码低级别名称(内核级)为用户级名称。
-d 打印调试信息。
-e 改变跟踪的事件。
-f 跟踪子进程。
-h 打印帮助信息。
-i 打印指令指针,当库调用时。
-l 只打印某个库中的调用。
-L 不打印库调用。
-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。
-o, --output=file 把输出定向到文件。
-p PID 附着在值为PID的进程号上进行ltrace。
-r 打印相对时间戳。
-s STRLEN 设置打印的字符串最大长度。
-S 显示系统调用。
-t, -tt, -ttt 打印绝对时间戳。
-T 输出每个调用过程的时间开销。
-u USERNAME 使用某个用户id或组ID来运行命令。
-V, --version 打印版本信息,然后退出。

参考资料

https://www.cnblogs.com/machangwei-8/p/10388938.html

ldd

这个命令用来查看进程使用的动态链接库。ldd不是一个可执行程序,而只是一个shell脚本

常见的参数使用

1
ldd /usr/bin/ls
1
ldd -v /usr/bin/ls

查看所有信息

输出:

1
2
3
4
5
6
/opt/app/todeav1/test$ldd test
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

解释:

1
2
3
第一列:程序需要依赖什么库
第二列: 系统提供的与程序需要的库所对应的库
第三列:库加载的开始地址

参考资料

https://linuxtools-rst.readthedocs.io/zh-cn/latest/tool/ldd.html


查看程序需要的资源的命令
https://ysc2.github.io/ysc2.github.io/2023/11/22/查看程序需要的资源的命令/
作者
Ysc
发布于
2023年11月22日
许可协议