truss命令

truss 命令

用途

跟踪进程的系统调用、动态装入的用户级函数调用、接收的信号和造成的机器故障。

truss 命令执行指定命令或附加在列出进程标识上,并产生对系统调用、接收的信号和进程造成的机器故障的跟踪。每行跟踪输出报告 Fault Signal 名称或 Syscall 名称和参数及返回值。系统库定义的子例程对于内核的严格系统调用并不是必要的。truss 命令不报告这些子例程,而是报告子例程的基本系统调用。可能的话,系统调用参数使用有关系统头文件定义符号显示。对于路径名指针参数,truss 显示指向的字符串。未定义的系统调用缺省显示系统名称、所有八个可能的变量及十六进制格式的返回值。

-o 标志和 truss 一起使用,或标准错误改指向非终端文件时,truss 忽略挂断、中断和信号进程。他促进跟踪交互式程式从终端获得 interrupt quit 信号。

若跟踪输出保持指向终端或跟踪现存过程(使用 -p 标志),truss hangupinterrupt quit 信号做出反应,释放所有跟踪进程并退出。他使用户可终止过多的跟踪输出并释放前现存进程。释放进程继续到功能恢复正常。

示例

1. 在终端上跟踪 find 命令,输入:

truss find . -print >find.out

2. 跟踪 lseekclosestatx 和开放系统调用,输入:

truss -t lseek,close,statx,open find . -print > find.out

3. 显示 find 命令的线程标识和常规输出,输入:

truss -l find . -print >find.out

4. 显示 find 命令的时间戳记和常规输出,输入:

truss -d find . -print >find.out

5. 显示 find 命令的增量时间和常规输出,输入:

truss -D find . -print >find.out

6. 运行 ls 命令时,在 libc.a 库中跟踪 malloc() 函数调用及除去 strlen() 函数调用,输入:

truss -u libc.a::malloc,!strlen ls

7. 运行 ls 命令时,跟踪 libc.a 库中名称以“m”开头的所有函数调用,输入:

truss -u libc.a::m*,!strlen ls

8. 运行可执行 foo 时,跟踪来自 libcurses.a 库的所有函数调用及除去来自 libc.a 的调用,输入:

truss -u libcurses.a,!libc.a::* foo

9. 运行可执行 foo 时,跟踪来自 libcurses.a refresh() 函数调用和来自 libc.a malloc() 函数调用,输

入:

truss -u libc.a::malloc -u libcurses.a::refresh foo

原文

http://hi.baidu.com/lmcbbat/item/1e1022e4780af00b8c3ea868

posted @ 2013-04-23 00:28  浪里飞  阅读(1278)  评论(0编辑  收藏  举报