博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux程序调试命令strace
阅读量:6441 次
发布时间:2019-06-23

本文共 3194 字,大约阅读时间需要 10 分钟。

strace命令用法详解:

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

strace常用参数:

-p	跟踪指定的进程-f	跟踪由fork子进程系统调用-F	尝试跟踪vfork子进程系统调吸入,与-f同时出现时, vfork不被跟踪-o      filename 默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中-ff	常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到filename.PID文件-r	打印每一个系统调用的相对时间-t	在输出中的每一行前加上时间信息。 -tt 时间确定到微秒级。还可以使用-ttt打印相对时间-v	输出所有系统调用。默认情况下,一些频繁调用的系统调用不会输出-s	指定每一行输出字符串的长度,默认是32。文件名一直全部输出-c	统计每种系统调用所执行的时间,调用次数,出错次数。-e	expr	输出过滤器,通过表达式,可以过滤出掉你不想要输出

命令实例:

[root@tomcat02 ~]# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 26 vars */]) = 0brk(0)                                  = 0x24ef000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443faf000access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)open("/etc/ld.so.cache", O_RDONLY)      = 3fstat(3, {st_mode=S_IFREG|0644, st_size=70314, ...}) = 0mmap(NULL, 70314, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fb0000close(3)                                = 0open("/lib64/libc.so.6", O_RDONLY)      = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\355A\2428\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=1979000, ...}) = 0mmap(0x38a2400000, 3803304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38a2400000mprotect(0x38a2597000, 2097152, PROT_NONE) = 0mmap(0x38a2797000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x38a2797000mmap(0x38a279c000, 18600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x38a279c000close(3)                                = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc2000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc3000arch_prctl(ARCH_SET_FS, 0x2b8443fc2b20) = 0mprotect(0x38a2797000, 16384, PROT_READ) = 0mprotect(0x38a1e1f000, 4096, PROT_READ) = 0munmap(0x2b8443fb0000, 70314)           = 0brk(0)                                  = 0x24ef000brk(0x2510000)                          = 0x2510000open("/usr/lib/locale/locale-archive", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=99158704, ...}) = 0mmap(NULL, 99158704, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fc4000close(3)                                = 0fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0open("/dev/null", O_RDONLY)             = 3fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0read(3, "", 32768)                      = 0close(3)                                = 0close(1)                                = 0close(2)                                = 0exit_group(0)                           = ?

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。

strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。  

通用的完整用法:

strace -o output.txt -T -tt -e trace=all -p 28979

上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。

2.在umount挂载目录时,直接卡住了,最后用 strace df -Th分析后结果挂载出问题了

strace df -Th

3.用strace跟踪 whoami的输出:

strace -o whoami-strace.txt whoami

  

参考文档:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

你可能感兴趣的文章
目前支持WebGL的浏览器有哪些?
查看>>
ARKit从入门到精通(1)-ARKit初体验
查看>>
debug
查看>>
配置文件git config介绍
查看>>
IIS7的应用程序池详细解析
查看>>
java类路径classpath和包
查看>>
Information Retrieval 倒排索引 学习笔记
查看>>
【Git】Git-add之后-忽略部分文件的方法
查看>>
JQuery使用trigger模拟触发selete的选择change事件
查看>>
连表更新数据
查看>>
tensorflow笔记1:基础函数、embedding_lookup
查看>>
如何用phpmyadmin导入大容量.sql文件,直接使用cmd命令进行导入
查看>>
BZOJ4133 : Answer的排队
查看>>
基于Centos搭建 Mono 开发环境
查看>>
算法题:福尔摩斯的约会
查看>>
Oralce sql (+) 补充
查看>>
hdu 2665 划分树
查看>>
laravel中的plicy授权方法:
查看>>
基于R进行相关性分析--转载
查看>>
常用 cdn
查看>>