SuperAPI AI 工具集

Function Call Tracing

通用与其它

查看项目

更新于 10-15 21:49

技能介绍

用途:对 C/C++ 程序进行函数级执行跟踪,记录函数调用进入与退出,并按线程生成日志,最终可用 Perfetto 可视化调用时序,便于分析调用栈、执行顺序和耗时。

主要能力:

  1. 插桩库 trace_instrument.c:捕获函数 entry/exit,写每线程日志。构建: gcc -c -fPIC trace_instrument.c -o trace_instrument.o gcc -shared trace_instrument.o -o libtrace.so -ldl -lpthread
  2. 转换器 trace_to_perfetto.cpp:将日志转为 Chrome JSON 供 Perfetto UI 使用。构建: g++ -O3 -std=c++17 trace_to_perfetto.cpp -o trace_to_perfetto

使用方式: Step 1 在构建配置中加入 CFLAGS += -finstrument-functions -g 和 LDFLAGS += -L. -ltrace -ldl -lpthread。 Step 2 执行 make 构建目标。 Step 3 设置 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 并运行 ./program,生成 trace_<tid>.log。 Step 4 转换:./trace_to_perfetto trace_*.log -o trace.json,然后在 ui.perfetto.dev 打开 trace.json。

构建系统集成:Makefile 可用 ENABLE_TRACE 条件开关;CMake 可用 option(ENABLE_TRACE "Enable tracing" OFF) 与 add_compile_options(-finstrument-functions -g)、link_libraries(trace dl pthread)。

日志格式:[seq] [timestamp] [dots] [ENTRY|EXIT!] function_name,dots 表示调用深度,时间戳为秒.纳秒,每线程一个日志文件。Perfetto JSON 中 ENTRY 对应 "B" 事件,EXIT! 对应 "E" 事件,所有线程按时间戳对齐到单个文件。

适用场景:需要观察 C/C++ 程序运行时函数调用关系的调试、性能分析或教学场景。限制:需重新编译并链接插桩库;未提供其它平台、语言或运行开销的说明。