用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪

用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪

1:功能介绍,使用本方法可以实现linux下C应用程序的调用跟踪。对于了解大型的程序的运行过程,和函数的调用情况分析很有帮助。

2:用到的开源软件的安装

2.1 pvtrace

如果你的linux不支持解压*.zip最好在windows下解压后copy到linux下。

解压后有以下几个文件

在linux上安装pvtrace

需要root权限

$ make

$ make install

2.2 Graphviz

Graphviz也是一个开源项目,可以将pvtrace生成的*.dot文件转成图片格式便于查看。Graphviz的下载地址http://www.graphviz.org/Download..php

有针对多种操作系统的,我们这里用windows版安装简单且方便使用

安装后有以下工具:

3:对要跟踪工程的修改

3.1我们先用一个小程序学习一下使用过程。

首先:先写一个小的test.c

void aa(int i)

{

printf("%d\n",i);

}

int main()

{

printf("hellow

world\n");

aa(10);

printf("test\n");

return;

}

然后将instrument.c考到与test.c相同的目录

$ lsinstrument.c

test.c

执行:

$ gcc -g

-finstrument-functions test.c instrument.c -o test再:$

./test可以看到多了一个trace.txt$ lsinstrument.c test.ctest trace.txt然后再:$

pvtrace test得到 graph.dot$ lsgraph.dot test trace.txtinstrument.c

test.c将graph.dot拷贝到widows下运行graphviz的dot模式(我们在2.2安装的)将它转化成图像。

输出的test.jpg

3.2

以capwap的跟踪为例

我们在这里以开源的capwap为例

首先将instrument.c拷贝到capwap所在的目录

$ ls

……………………………….

instrument.c

……………………………….

$ vim Makefile

其次,在Makefile里添加(红色字为注释)

DEBUG = 1

这主要是为了调试方便,如果不需要跟踪就把DEBUG指设成0 可以放在Makefile的第一行。

ifeq ($(DEBUG),1)

CFLAGS += -g

-finstrument-functions

AC_OBJS +=

instrument.o

WTP_OBJS +=

instrument.o

endif

放在 CFLAGS AC_OBJS

WTP_OBJS 定义之后

CFLAGS += -g

-finstrument-functions 是在编译选项中加入调试信息。是必须的。

AC_OBJS +=

instrument.o

WTP_OBJS +=

instrument.o

这两项是将instrument.c

与程序一起编译了

然后

$ make

$ ./AC

会生成trace.txt

$ qvtrace AC

会生成 graph.dot

然后同test一样,用graphviz转成图像格式。如下:

linux 跟踪程序执行过程,用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪相关推荐

  1. 用Python脚本实现对Linux服务器的监控

    一.前言 二.概述 三.Python 版本说明 四./proc 文件系统 五.对CPU监测 六.对系统负载监测 七.对内存信息的获取 八.对网络接口的监测 九.监控apache服务器进程的Python ...

  2. 用 Python 脚本实现对 Linux 服务器的监控

    版本说明 Linux 服务器是 Ubuntu 12.10 Python 版本 是 2.7 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核, ...

  3. linux脚本执行过程中被挂起,Linux学习笔记(八)——脚本执行的过程控制

    一.脚本执行过程中的控制 之前的内容中,运行编写好的脚本时都是在命令行上直接确定运行的,并且运行的脚本是实时的,这并不是脚本唯一的运行方式,下面的内容是脚本的其他运行方式.例如在Linux系统中如何控 ...

  4. Linux命令执行过程中的配置文件信息

    命令执行过程 前面讲到过使用 alias 可以建立别名,比如创建了一个 ls 的别名,其实 ls 有少的指令,那么到底是哪一个会被选中执行呢?基本上,指令运行顺序可以这样看: 以相对.绝对路径执行命令 ...

  5. Hadoop详解(三)——MapReduce原理和执行过程,远程Debug,Writable序列化接口,MapReduce程序编写

    MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和Re ...

  6. Linux is执行程序命令,linux命令执行过程详解

    1.执行命令 输入命令后回车 提请shell程序找到键入命令所对应的可执行程序或者代码,并且由其分期后,提交给内核分配资源将其运行起来. 在shell中可执行的命令有俩类: 内部命令:由shell自带 ...

  7. linux kernel_thread执行过程

    kernel_thread kernel_thread定义(kernel/fork.c): /** Create a kernel thread.*/ pid_t kernel_thread(int ...

  8. linux继续执行上一个命令快捷键,整理了上linux 命令行上常用的 快捷键

    整理了下linux 命令行下常用的 快捷键 整理了下linux 命令行下常用的 快捷键 1.CTRL + u 删除正行你敲的命令. 例如 : find . -name 'hoho' 按下CTRL + ...

  9. linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...

    1.首先给服务器装上idrac模块,然后给idrac配置一个远程IP,用作管理 2.在web界面输入IP,弹出以下界面,输入账号密码登录 3.认证成功后,点击虚拟控制台启动 4.进入如下界面,点击菜单 ...

最新文章

  1. 算法与数据结构大系列 - NO.1 - 插入排序
  2. Solaris 10 x86 上折腾Mono
  3. 3D图形学的线性代数的通俗解释。
  4. matlab 图像处理函数(第八章) 图像的增强
  5. 蓝桥杯java第七届决赛第一题--愤怒小鸟
  6. Spring事务TransactionProxyFactoryBean属性-transactionAttributes的意义
  7. oracle raw如何生成,如何使用raw device构建Oracle数据库
  8. oracle java 映射_java程序访问映射后的oracle
  9. ceph--磁盘和rbd、rados性能测试工具和方法
  10. 使用folium制作出行地图
  11. 英语语法之简单句型(一)
  12. 算机类学术论文 28个常见出版社一般写法(参考文献用)
  13. mysql停止修复_浅析MySQL 8.0崩溃恢复
  14. React中文文档之Composition vs Inheritance
  15. sklearn.neighbors 最近邻相关算法,最近邻分类和回归
  16. 2018年秋季校招投递记录
  17. POJ 3179Corral the Cows(离散化+二分)
  18. mysql 文档生成器_最好用的数据库文档生成工具
  19. 杰理之SD卡 MMC卡 U盘 假U盘【篇】
  20. 这个世界没好过-虚拟采访鲁迅先生

热门文章

  1. Python正则表达式之零宽断言(4)
  2. 【WEB安全】Xstream最新反序列化poc执行报错问题
  3. 系统调用004 SSDT
  4. SSD 通俗易懂介绍
  5. HTML导航页面结构
  6. 寒假每日一题(提高组)【Week 2 完结】
  7. C语言希尔排序(解析)
  8. python中使用ElementTree 操作XML
  9. Spring boot优点
  10. Boostrap的按钮下拉菜单