UNPKG

2.72 kBMarkdownView Raw
1ltrace
2===
3
4用来跟踪进程调用库函数的情况
5
6## 补充说明
7
8**ltrace命令** 是用来跟踪进程调用库函数的情况。
9
10### 语法
11
12```shell
13ltrace [option ...] [command [arg ...]]
14```
15
16### 选项
17
18```shell
19-a 对齐具体某个列的返回值。
20-c 计算时间和调用,并在程序退出时打印摘要。
21-C 解码低级别名称(内核级)为用户级名称。
22-d 打印调试信息。
23-e 改变跟踪的事件。
24-f 跟踪子进程。
25-h 打印帮助信息。
26-i 打印指令指针,当库调用时。
27-l 只打印某个库中的调用。
28-L 不打印库调用。
29-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。
30-o, --output=file 把输出定向到文件。
31-p PID 附着在值为PID的进程号上进行ltrace。
32-r 打印相对时间戳。
33-s STRLEN 设置打印的字符串最大长度。
34-S 显示系统调用。
35-t, -tt, -ttt 打印绝对时间戳。
36-T 输出每个调用过程的时间开销。
37-u USERNAME 使用某个用户id或组ID来运行命令。
38-V, --version 打印版本信息,然后退出。
39-x NAME treat the global NAME like a library subroutine.(求翻译)
40```
41
42### 实例
43
44最基本应用,不带任何参数:
45
46```shell
47[guest@localhost tmp]$ ltrace ./a.out
48__libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540 <unfinished ...>
49printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24
50printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23
51printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23
52--- SIGFPE (Floating point exception) ---
53+++ killed by SIGFPE +++
54```
55
56输出调用时间开销:
57
58```shell
59[guest@localhost tmp]$ ltrace -T ./a.out
60__libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540 <unfinished ...>
61printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 <0.000972>
62printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 <0.000155>
63printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 <0.000153>
64--- SIGFPE (Floating point exception) ---
65+++ killed by SIGFPE +++
66```
67
68显示系统调用:
69
70```shell
71[guest@localhost tmp]$ ltrace -S ./a.out
72SYS_brk(NULL) = 0x9e20000
73SYS_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644) = 0
74SYS_open("/etc/ld.so.preload", 0, 02) = 3
75SYS_fstat64(3, 0xbfbd7a94, 0xa4afc0, -1, 3) = 0
76SYS_mmap2(0, 17, 3, 2, 3) = 0xb7f2a000
77SYS_close(3) = 0
78SYS_open("/lib/libcwait.so", 0, 00) = 3
79SYS_read(3, "\177ELF\001\001\001", 512) = 512
80SYS_fstat64(3, 0xbfbd76fc, 0xa4afc0, 4, 0xa4b658) = 0
81SYS_mmap2(0, 4096, 3, 34, -1) = 0xb7f29000
82SYS_mmap2(0, 5544, 5, 2050, 3) = 0x423000
83SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000
84.............省去若干行
85```
86
87