博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
finstrument-functions
阅读量:5334 次
发布时间:2019-06-15

本文共 2073 字,大约阅读时间需要 6 分钟。

2017-12-03  23:59:16

参考 如何快速地在每个函数入口处加入相同的语句?

做个存档

1 scj@scjComputer:~/THpro/func_trace$ tree .2 .3 ├── func_trace.c4 ├── func_trace.sh5 ├── imple6 │   ├── bar.c7 │   └── bar.h8 ├── main.c9 └── 步骤
func_trace.c
1 #include 
2 3 static FILE *fp_trace; 4 5 void __attribute__((constructor)) traceBegin(void) { 6 fp_trace = fopen("func_trace.out", "w"); 7 } 8 9 void __attribute__((destructor)) traceEnd(void) {10 if (fp_trace != NULL) {11 fclose(fp_trace);12 }13 }14 15 void __cyg_profile_func_enter(void *func, void *caller) {16 if (fp_trace != NULL) {17 fprintf(fp_trace, "entry %p %p\n", func, caller);18 }19 }20 21 void __cyg_profile_func_exit(void *func, void *caller) {22 if (fp_trace != NULL) {23 fprintf(fp_trace, "exit %p %p\n", func, caller);24 }25 }
View Code
func_trace.sh
 
1 #!/bin/bash 2 EXECUTABLE="$1" 3 TRACELOG="$2" 4  5 while read TRACEFLAG FADDR CADDR; do 6 FNAME="$(addr2line -f -e ${EXECUTABLE} ${FADDR}|head -1)" 7  8 if test "${TRACEFLAG}" = "entry" 9 then10 CNAME="$(addr2line -f -e ${EXECUTABLE} ${CADDR}|head -1)"11 CLINE="$(addr2line -s -e ${EXECUTABLE} ${CADDR})"12 echo "Enter ${FNAME} called from ${CNAME} (${CLINE})"13 fi14 15 if test "${TRACEFLAG}" = "exit"16 then17 echo "Exit  ${FNAME}"18 fi19 20 done < "${TRACELOG}"
View Code
 
bar.c
 
1 #include "bar.h" 2  3 int bar(void) { 4   zoo(); 5   return 1; 6 } 7  8 int foo(void) {   9   return 2; 10 }11 12 void zoo(void) { 13   foo(); 14 }
View Code
 
bar.h
 
1 #ifndef bar_h2 #define bar_h3 4 int bar(void);5 int foo(void);6 void zoo(void);7 8 #endif
View Code
 
main.c
 
1 #include 
2 #include "./imple/bar.h"3 4 int main(int argc, char **argv) { 5 bar(); 6 }
View Code
 

然后按照如下顺序执行:

1 gcc func_trace.c -c2 gcc main.c ./imple/*.c func_trace.o -finstrument-functions3 ./a.out4 ./func_trace.sh a.out func_trace.out
可以直接编译好多源文件的程序了。 直接把main.c以外的文件放进imple文件夹里头就可以 如果第二步有问题,用
gcc main.c ./source/*.c func_trace.o -finstrument-functions 2>trace_log.txt
 
导出编译信息 imple文件夹里头的东西封装成so后反而看不到调用过程。

转载于:https://www.cnblogs.com/shepherd2015/p/7968083.html

你可能感兴趣的文章
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
单例模式的几种实现方式及对比
查看>>
邓白氏编码 申请
查看>>