用strace统计系统调用

一 点睛

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

二 实战1

1 代码

#include 
using namespace std;
int main(){
    int a;
    cin>>a;
    cout<

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
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输出,用到的系统调用数量都是一样的。

你可能感兴趣的:(C++)