使用strace调试程序

来源:互联网 发布:windows正版验证网站 编辑:程序博客网 时间:2024/05/18 13:27

命令:strace

作用:strace常用来跟踪进程执行时的系统调用和所接收的信号。

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


示例:

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

strace 显示这些调用的参数并返回符号形式的值。

strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。

~$strace pwdexecve("/bin/pwd", ["pwd"], [/* 19 vars */]) = 0brk(0)                                  = 0x1d19000access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4b31c26000access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=22297, ...}) = 0mmap(NULL, 22297, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4b31c20000close(3)                                = 0access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=1811128, ...}) = 0mmap(NULL, 3925176, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4b31647000mprotect(0x7f4b317fb000, 2097152, PROT_NONE) = 0mmap(0x7f4b319fb000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b4000) = 0x7f4b319fb000mmap(0x7f4b31a01000, 17592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4b31a01000close(3)                                = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4b31c1f000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4b31c1e000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4b31c1d000arch_prctl(ARCH_SET_FS, 0x7f4b31c1e700) = 0mprotect(0x7f4b319fb000, 16384, PROT_READ) = 0mprotect(0x606000, 4096, PROT_READ)     = 0mprotect(0x7f4b31c28000, 4096, PROT_READ) = 0munmap(0x7f4b31c20000, 22297)           = 0brk(0)                                  = 0x1d19000brk(0x1d3a000)                          = 0x1d3a000open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=2919792, ...}) = 0mmap(NULL, 2919792, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4b3137e000close(3)                                = 0getcwd("/root", 4096)                   = 6fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4b31c25000write(1, "/root\n", 6/root)                  = 6close(1)                                = 0munmap(0x7f4b31c25000, 4096)            = 0close(2)                                = 0exit_group(0)                           = ?


0 0
原创粉丝点击