用strace统计系统调用

一 点睛

strace不仅能追踪系统调用,通过使用参数-c,它还能将进程的系统调用做一个统计分析并返回。

二 实战1

1 代码

#include <iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    cout<<a<<endl;
    return 0;
}

2 编译上面的代码,并用strace进行统计

[root@localhost charpter05]# strace -c ./test
88
88
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
53.00    0.000053           5        10           mprotect
16.00    0.000016           3         5           read
11.00    0.000011           1        18           mmap
10.00    0.000010          10         1           munmap
  6.00    0.000006           1         7           fstat
  4.00    0.000004           4         1           write
  0.00    0.000000           0         5           open
  0.00    0.000000           0         5           close
  0.00    0.000000           0         1           brk
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000100                    56         1 total

3 分析

test程序一共调用了5次read,1次write函数,各个系统函数调用次数是多少,消耗了多少时间,这些信息都清晰可见。

三 实战2

1 代码

将实战1中cin和cout函数scanf和printf

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    printf("%d\n",a);
    return 0;
}

2 编译上面的代码,并用strace进行统计

[root@localhost charpter05]# strace -c ./test
8
8
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         5           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0         5           open
  0.00    0.000000           0         5           close
  0.00    0.000000           0         7           fstat
  0.00    0.000000           0        18           mmap
  0.00    0.000000           0        10           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         1           brk
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    56         1 total

3 说明

用C++的cin输入cout输出和C的scanf输入和printf输出,用到的系统调用数量都是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值