linux 跟踪程序执行过程,用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
用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程序的函数调用跟踪相关推荐
- 用Python脚本实现对Linux服务器的监控
一.前言 二.概述 三.Python 版本说明 四./proc 文件系统 五.对CPU监测 六.对系统负载监测 七.对内存信息的获取 八.对网络接口的监测 九.监控apache服务器进程的Python ...
- 用 Python 脚本实现对 Linux 服务器的监控
版本说明 Linux 服务器是 Ubuntu 12.10 Python 版本 是 2.7 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核, ...
- linux脚本执行过程中被挂起,Linux学习笔记(八)——脚本执行的过程控制
一.脚本执行过程中的控制 之前的内容中,运行编写好的脚本时都是在命令行上直接确定运行的,并且运行的脚本是实时的,这并不是脚本唯一的运行方式,下面的内容是脚本的其他运行方式.例如在Linux系统中如何控 ...
- Linux命令执行过程中的配置文件信息
命令执行过程 前面讲到过使用 alias 可以建立别名,比如创建了一个 ls 的别名,其实 ls 有少的指令,那么到底是哪一个会被选中执行呢?基本上,指令运行顺序可以这样看: 以相对.绝对路径执行命令 ...
- Hadoop详解(三)——MapReduce原理和执行过程,远程Debug,Writable序列化接口,MapReduce程序编写
MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和Re ...
- Linux is执行程序命令,linux命令执行过程详解
1.执行命令 输入命令后回车 提请shell程序找到键入命令所对应的可执行程序或者代码,并且由其分期后,提交给内核分配资源将其运行起来. 在shell中可执行的命令有俩类: 内部命令:由shell自带 ...
- linux kernel_thread执行过程
kernel_thread kernel_thread定义(kernel/fork.c): /** Create a kernel thread.*/ pid_t kernel_thread(int ...
- linux继续执行上一个命令快捷键,整理了上linux 命令行上常用的 快捷键
整理了下linux 命令行下常用的 快捷键 整理了下linux 命令行下常用的 快捷键 1.CTRL + u 删除正行你敲的命令. 例如 : find . -name 'hoho' 按下CTRL + ...
- linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...
1.首先给服务器装上idrac模块,然后给idrac配置一个远程IP,用作管理 2.在web界面输入IP,弹出以下界面,输入账号密码登录 3.认证成功后,点击虚拟控制台启动 4.进入如下界面,点击菜单 ...
最新文章
- 算法与数据结构大系列 - NO.1 - 插入排序
- Solaris 10 x86 上折腾Mono
- 3D图形学的线性代数的通俗解释。
- matlab 图像处理函数(第八章) 图像的增强
- 蓝桥杯java第七届决赛第一题--愤怒小鸟
- Spring事务TransactionProxyFactoryBean属性-transactionAttributes的意义
- oracle raw如何生成,如何使用raw device构建Oracle数据库
- oracle java 映射_java程序访问映射后的oracle
- ceph--磁盘和rbd、rados性能测试工具和方法
- 使用folium制作出行地图
- 英语语法之简单句型(一)
- 算机类学术论文 28个常见出版社一般写法(参考文献用)
- mysql停止修复_浅析MySQL 8.0崩溃恢复
- React中文文档之Composition vs Inheritance
- sklearn.neighbors 最近邻相关算法,最近邻分类和回归
- 2018年秋季校招投递记录
- POJ 3179Corral the Cows(离散化+二分)
- mysql 文档生成器_最好用的数据库文档生成工具
- 杰理之SD卡 MMC卡 U盘 假U盘【篇】
- 这个世界没好过-虚拟采访鲁迅先生