ltrace

ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用。

参数

-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 打印版本信息,然后退出。
-x NAME treat the global NAME like a library subroutine.

实战

ltrace ./tcpserver

[root@iz2zecj7a5r32f2axsctb9z tcp]# ltrace ./tcpserver
__libc_start_main(0x400a8d, 1, 0x7ffcd1694e68, 0x400cc0 <unfinished ...>
socket(2, 1, 0)                                                                 = 3
memset(0x7ffcd1694d50, '\0', 16)                                                = 0x7ffcd1694d50
htons(9111, 0, 16, 0)                                                           = 0x9723
htonl(0, 0, 16, 0)                                                              = 0
bind(3, 0x7ffcd1694d50, 16, 0x7ffcd1694d50)                                     = 0
puts("\347\273\221\345\256\232\347\253\257\345\217\243\346\210\220\345\212\237"绑定端口成功
) = 19
listen(3, 2, 0x7fb005ecea00, -1)                                                = 0
puts("\345\220\257\345\212\250\347\233\221\345\220\254"启动监听
)                        = 13
puts("\347\255\211\345\276\205Accept\350\277\236\346\216\245"等待Accept连接
)                  = 19
accept(3, 0x7ffcd1694d40, 0x7ffcd1694d60, 0x7ffcd1694d40

ltrace -c ./tcpserver

 time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 50.01    1.307603     1307603         1 __libc_start_main
 49.94    1.305927     1305927         1 accept
  0.02    0.000488         162         3 puts
  0.01    0.000152         152         1 socket
  0.01    0.000143         143         1 listen
  0.01    0.000134         134         1 bind
  0.00    0.000113         113         1 htons
  0.00    0.000102         102         1 memset
  0.00    0.000099          99         1 htonl
------ ----------- ----------- --------- --------------------
100.00    2.614761                    11 total

ltrace -tt -T ./tcpserver

[root@iz2zecj7a5r32f2axsctb9z tcp]# ltrace -tt -T ./tcpserver
18:30:04.139603 __libc_start_main(0x400a8d, 1, 0x7ffc44b05068, 0x400cc0 <unfinished ...>
18:30:04.140777 socket(2, 1, 0)                                                 = 3 <0.000193>
18:30:04.141030 memset(0x7ffc44b04f50, '\0', 16)                                = 0x7ffc44b04f50 <0.000142>
18:30:04.141225 htons(9111, 0, 16, 0)                                           = 0x9723 <0.000155>
18:30:04.141433 htonl(0, 0, 16, 0)                                              = 0 <0.000149>
18:30:04.141635 bind(3, 0x7ffc44b04f50, 16, 0x7ffc44b04f50)                     = 0 <0.000175>
18:30:04.141862 puts("\347\273\221\345\256\232\347\253\257\345\217\243\346\210\220\345\212\237"绑定端口成功
) = 19 <0.000381>
18:30:04.142303 listen(3, 2, 0x7f56dce51a00, -1)                                = 0 <0.000183>
18:30:04.142539 puts("\345\220\257\345\212\250\347\233\221\345\220\254"启动监听
)        = 13 <0.000243>
文档更新时间: 2021-03-02 18:30   作者:周国强