标签:strace ldd
strace常用来跟踪进程执行时的系统调用和所接收的信号。你不仅可以调试一个新开始的程序,也可以调试一个已经在运行的程序(把strace绑定到一个已有的PID上 面)。
通用语法:
strace -o output.txt -T -tt -e trace=all -p 28979
上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
root@ubuntu:/usr# strace cat /dev/ execve(, [, ], []) = brk() = access(, F_OK) = - ENOENT (No such file or directory) mmap(NULL, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -, ) = access(, R_OK) = - ENOENT (No such file or directory) ... brk() = brk() = fstat(, {st_mode=S_IFCHR|, st_rdev=makedev(, ), ...}) = open(, O_RDONLY) = fstat(, {st_mode=S_IFCHR|, st_rdev=makedev(, ), ...}) = read(, , ) = close() = close() = close() = exit_group() = ?
每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
starce 的另一个用处是解决和动态库相关的问题。当对一个可执行文件运行ldd时,它会告诉你程序使用的动态库和找到动态库的位置。但是,ldd并不能把所有程序依赖的动态库列出来。
strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用耗时;pstack工具对指定PID的进程输出函数调用栈。
strace + pstack + ldd
标签:strace ldd
原文地址:http://dannyswallow.blog.51cto.com/5062777/1739634