Linux调试工具之:Strace

下面的命令在Hisi的Hi3716C的Android4.0平台测试
1.Strace
作用:显示所有由用户空间程序发出的系统调用。
strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 
  下面记录几个常用 option . 
  1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 
  2 -o xxx.txt 输出到某个文件。 
  3 -e execve 只记录 execve 这类系统调用 

实例:cat运行时的系统调用
root@android:/mnt/sda/sda1 # strace -o /mnt/sdcard/output cat                  


aa
aa
bb
bb
cc
cc
^Croot@android:/mnt/sda/sda1 # 
root@android:/mnt/sda/sda1 # 
root@android:/mnt/sda/sda1 # cat /mnt/sdcard/output                            
execve("/system/bin/cat", ["cat"], [/* 21 vars */]) = 0
syscall_983045(0xb0012c78, 0xb00144c4, 0xffffffc8, 0, 0, 0xb00094f0, 0xbee58b90, 0xf0005, 0xb0012c78, 0, 0, 0, 0, 0xbee58b40, 0xb00047bb, 0xb0001200, 0x10, 0xb0012c78, 0xb691, 0, 0x7379732f, 0x2f6d6574, 0x2f6e6962, 0x746163, 0, 0, 0, 0, 0, 0, 0, 0) = 0
getpid()                                = 14443
getuid32()                              = 0
geteuid32()                             = 0
getgid32()                              = 1007
getegid32()                             = 1007
sigaction(SIGILL, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGABRT, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGBUS, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGFPE, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGSEGV, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGSTKFLT, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
sigaction(SIGPIPE, {0xb0005b29, [], SA_RESTART|SA_SIGINFO}, NULL, 0x700020) = 0
stat64("/vendor/lib/liblog.so", 0xbee58830) = -1 ENOENT (No such file or directory)
stat64("/system/lib/liblog.so", {st_mode=S_IFREG|0644, st_size=13888, ...}) = 0
open("/system/lib/liblog.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 13880
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40042000
mmap2(0x40042000, 10956, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x40042000
mprotect(0x40042000, 12288, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40045000, 412, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x3) = 0x40045000
close(3)                                = 0
stat64("/vendor/lib/libc.so", 0xbee58588) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libc.so", {st_mode=S_IFREG|0644, st_size=282244, ...}) = 0
open("/system/lib/libc.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 282236
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 327680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x400de000
mmap2(0x400de000, 268384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x400de000
mprotect(0x400de000, 270336, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40120000, 10132, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x42) = 0x40120000
mmap2(0x40123000, 43804, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40123000
close(3)                                = 0
mprotect(0x400de000, 270336, PROT_READ|PROT_EXEC) = 0
SYS_224(0, 0xbee39000, 0x20000, 0xbee58570) = 14443
syscall_983045(0x4012d4c4, 0x4012d488, 0x4012d5c0, 0x40, 0x4012d488, 0xbee58b90, 0xbee58b9c, 0xf0005, 0xbee39000, 0x40123000, 0x50000, 0x400de000, 0, 0xbee58568, 0x40105c79, 0x400eb434, 0x60000010, 0x4012d4c4, 0xb691, 0, 0x7379732f, 0x2f6d6574, 0x2f62696c, 0x6362696c, 0x6f732e, 0x6f, 0, 0, 0, 0, 0, 0) = 0
mmap2(NULL, 32768, PROT_READ, MAP_SHARED, 8, 0) = 0x4012e000
msgget(0x1, 0xbee58590, 0x400f7ba5, 0x400f7ba7) = 0
open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3
read(3, "Iµòì", 4)                      = 4
close(3)                                = 0
stat64("/vendor/lib/libstdc++.so", 0xbee58588) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libstdc++.so", {st_mode=S_IFREG|0644, st_size=5520, ...}) = 0
open("/system/lib/libstdc++.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 5512
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40136000
mmap2(0x40136000, 2728, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x40136000
mprotect(0x40136000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40137000, 276, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1) = 0x40137000
close(3)                                = 0
mprotect(0x40136000, 4096, PROT_READ|PROT_EXEC) = 0
stat64("/vendor/lib/libm.so", 0xbee58588) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libm.so", {st_mode=S_IFREG|0644, st_size=87412, ...}) = 0
open("/system/lib/libm.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 87404
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 90112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40138000
mmap2(0x40138000, 84300, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x40138000
mprotect(0x40138000, 86016, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x4014d000, 256, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x15) = 0x4014d000
close(3)                                = 0
mprotect(0x40138000, 86016, PROT_READ|PROT_EXEC) = 0
mprotect(0x40042000, 12288, PROT_READ|PROT_EXEC) = 0
stat64("/vendor/lib/libcutils.so", 0xbee58830) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libcutils.so", {st_mode=S_IFREG|0644, st_size=63908, ...}) = 0
open("/system/lib/libcutils.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 63900
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 126976, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40058000
mmap2(0x40058000, 57644, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x40058000
mprotect(0x40058000, 61440, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x40067000, 1224, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xf) = 0x40067000
mmap2(0x40068000, 57788, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40068000
close(3)                                = 0
mprotect(0x40058000, 61440, PROT_READ|PROT_EXEC) = 0
stat64("/vendor/lib/libusbhost.so", 0xbee58830) = -1 ENOENT (No such file or directory)
stat64("/system/lib/libusbhost.so", {st_mode=S_IFREG|0644, st_size=9696, ...}) = 0
open("/system/lib/libusbhost.so", O_RDONLY|O_LARGEFILE) = 3
lseek(3, 0, SEEK_SET)                   = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\000"..., 4096) = 4096
lseek(3, -8, SEEK_END)                  = 9688
read(3, "\1\0\0\0\0\0\0\0", 8)          = 8
mmap2(NULL, 12288, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40089000
mmap2(0x40089000, 6324, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x40089000
mprotect(0x40089000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x4008b000, 356, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2) = 0x4008b000
close(3)                                = 0
mprotect(0x40089000, 8192, PROT_READ|PROT_EXEC) = 0
mprotect(0x8000, 94208, PROT_READ|PROT_EXEC) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40077000
mprotect(0x40077000, 4096, PROT_READ)   = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(204, 64), ...}) = 0
brk(0)                                  = 0x7f2000
brk(0x7f2000)                           = 0x7f2000
brk(0x7f4000)                           = 0x7f4000
/* 输入 aa。。。调试*/
read(0, "\n", 4096)                     = 1
write(1, "\n", 1)                       = 1
read(0, "aa\n", 4096)                   = 3
write(1, "aa\n", 3)                     = 3
read(0, "bb\n", 4096)                   = 3
write(1, "bb\n", 3)                     = 3
read(0, "cc\n", 4096)                   = 3
write(1, "cc\n", 3)                     = 3
read(0, 0x7f2008, 4096)                 = ? ERESTARTSYS (To be restarted)
/* ctrl +c 退出*/
--- SIGINT (Interrupt) @ 0 (0) ---
+++ killed by SIGINT +++

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值