当前位置: 首页 > 工具软件 > uftrace > 使用案例 >

uftrace

慕宜民
2023-12-01

术语词典

术语意义
ftrace (内核function tracer)一款函数调用跟踪程序,最早仅能够记录内核的函数调用流程,现在已经逐步发展成一个框架。
uftrace (用户态function tracer)ftrace的用户态程序版本,主要用于用户态程序函数调用流程分析,性能分析等。

工具简介

uftrace主要用于函数调用性能分析,思路来源于内核函数性能分析工具 ftrace,其主要提供整个运行期间函数调用流程以及开销分析,也可生成性能报告。

使用方式

1 编辑源文件

#include <stdio.h>
void loop()
{
    int i = 0;
    for (i=0; i< 3; i++) {
        printf("hello:%d.\n", i);
    }
}
int main(int argc, char *argv[])
{
    loop();
}

2 编辑 Makefile

test : main.c
 gcc -pg main.c -o test

注意如果是gcc使用-pg 或 --finstrument-functions均可;clang目前只能使用 -pg。 若是qt工程需要加入 QMAKE_CXXFLAGS += -pg。

3 执行make生成test。

4 直接分析

$ uftrace ./test

hello:0.
hello:1.
hello:2.
# DURATION     TID     FUNCTION
  1.254 us [ 29381] | __monstartup();
  0.733 us [ 29381] | __cxa_atexit();
           [ 29381] | main() {
           [ 29381] |   loop() {
  4.827 us [ 29381] |     printf();
  0.408 us [ 29381] |     printf();
  0.215 us [ 29381] |     printf();
  6.826 us [ 29381] |   } /* loop */
  7.180 us [ 29381] | } /* main */

5 先采集数据再分析

$ uftrace record ~/Desktop/uftrace_test/test #注意此处的路径需要是全路径。

程序输出与直接执行一样,只是会在test执行完毕之后额外生成uftrace.data目录,其中记录回放数据。

6 绘制执行执行流程并profile

$ uftrace graph

# Function Call Graph for 'test' (session: a07fbf5d48ffdd37)
========== FUNCTION CALL GRAPH ==========
# TOTAL TIME   FUNCTION
  19.731 us : (1) test
   1.206 us :  +-(1) __monstartup
            :  | 
   0.623 us :  +-(1) __cxa_atexit
            :  | 
  17.902 us :  +-(1) main
  17.513 us :    (1) loop
  16.428 us :    (3) printf

4 生成分析报告:

$ uftrace report

Total time   Self time       Calls  Function
 ==========  ==========  ==========  ====================
  17.902 us    0.389 us           1  main
  17.513 us    1.085 us           1  loop
  16.428 us   16.428 us           3  printf
   1.206 us    1.206 us           1  __monstartup
   0.623 us    0.623 us           1  __cxa_atexit
 类似资料:

相关阅读

相关文章

相关问答