calltree的安装与使用

news2024/11/25 15:37:22

目录

0 calltree 和 graphviz的关系

1 graphviz的安装很简单 : 

2 有难的是calltree的安装,需要改一下代码.

Doxygen的使用

 参考

 这个人的笔记都挺好的, 没事多看看


0 calltree 和 graphviz的关系

要想绘制函数调用图的话,需要用到2个工具, calltree 和 graphviz.

calltree用来生成函数调用的关系; graphviz用来根据关系图来生成图像或者pdf.

1 graphviz的安装很简单 : 

使用calltree生成的dot来绘图的程序是 graphviz, 可以从下面的官网页面下载.

Download | Graphviz

或者Ubuntu直接使用命令安装

sudo apt-get install graphviz

2 有难的是calltree的安装,需要改一下代码.

首先下载源码:

Schily Tools - Browse /calltree at SourceForge.net

Calltree - Free Software Directory

https://osdn.net/projects/sfnet_schilytools/downloads/calltree/calltree-2.3.tar.bz2/

下面的README其实已经说了编译的命令

https://github.com/xunknown/calltree/blob/master/GUIDE

安装:

下载地址:http://download.chinaunix.net/download.php?id=2245&ResourceID=1172

解压后直接make即可,在make过程中会遇到错误,解决的命令

1、cp RULES/i686-linux-cc.rul RULES/x86_64-linux-cc.rul

 出现这个错误,执行1的命令

2、

 

find . -name "*.[c|h]" |xargs sed -i -e "s/fexecve/fexecve_calltree/"
find . -name "*.[c|h]" |xargs sed -i -e "s/getline/getline_calltree/"
find . -name "*.[c|h]" -exec grep getline -nH {} \;

find . -name "*.[c|h]" -exec grep fexecve -nH {} \;

之后就可以make成功, 在make install的时候记得加上sudo, 否则权限问题会导致有些目录无法cp成功.


3、
安装好后,软链接到/usr/bin目录下  ln -s /home/XXX/calltree/OBJ/x86_64-linux-cc/calltree /usr/bin/calltree
我没有做上面的软链接, 而是找到calltree的安装目录

 

 然后在 /etc/profile 里面加上PATH的路径, 就可以在任意目录调用了

 之后 source  /etc/profile 就可以生效, 在任意目录call 之后 按 tab 补全命令, 可以看到就是成功了 

之后就可以按照作者提供的命令对 linux kernel 或者 libuv 等进行分析了.

使用:
-g输出函数所在文件的目录

-m参数只用于分析main函数中的函数调用关系。

-p参数是默认的。它表示要使用C语言预处理程序分析代码。缺点是它会产生很多我们不关心的消息。

-np和-p是相反的。它表示不要使用C语言预处理程序分析代码。如果指定它,可能会导致分析过程出错。因为像开源项目,有几个不需要预处理处理下呢?

-xvcg参数表示导出一个可以使用VCG软件处理的格式的文件。
-dot参数表示导出一个dot格式文件,可以供graphviz处理的。

list可以让我们指定仅仅需要分析的函数里的函数调用。

还有一个重要的选项是listfunction ,缩写是lf,用来只打印某个函数中的调用,用法是: lf=your_function

使用一:

#calltree -np -b  list=start_kernel  depth=3 `find ./init/ ./kernel/ -name "*.c"` > maps

#vi maps


使用二:
calltree -np -b -dot list=start_kernel ./init/*.c > ~/start_kernel.dot
dot -T png start_kernel.dot -o ./testhaha.png

使用三:
calltree -dot list="ev_run" *.c > ev_run.dot
     
dot -Tgif ev_run.dot -o ev_run.gif


参考链接:
https://www.2cto.com/kf/201707/660151.html

http://www.cnblogs.com/mylinux/p/6145625.html


Doxygen的使用

这里附上一个Windows平台可以生成调用图,单独使用的工具

Doxygen: Downloads

linux的部分可以使用下面2个命令安装

sudo apt install doxygen

sudo apt install doxygen-gui

参考的是 [Linux|doxygen + graphviz]接手没有注释的新项目怎么快速入手?快使用doxygen + graphviz快速生成项目文档! - 知乎

终端里面输入 doxywizard 来启动工具

 我的配置如上图

然后下个tab里面, 勾选前6项

 

 这2个要勾选上, 然后指定路径

 打开之后这里有很多参考的内容了

里面也有一些函数调用图 

生成的index.html多而且文件太碎了, 使用 hugeCHM将html转为chm方便观看

 打包完成从之前的500M变为了120M, 还是太大了, 而且没有html看着格式好看,那还是看html的版本算了.


 参考

cflow的地址

GNU cflow


 这个人的笔记都挺好的, 没事多看看

软件开发平台及语言笔记大全(超详细)

我发现了另一个工具 callgraph, 做为 calltree的更好用的替代

靜態分析 C 程序函數調用關係圖-软件开发平台及语言笔记大全(超详细)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【记录】Yolov5官网下载避坑记录

写在前面:刚开始接触Yolov5时,对一些基础的概念很模糊,在官网下载也不知道该下载什么版本好。后续更是遇到了一些奇奇怪怪的坑。在此记录一下最初的研究过程,顺带填一下yolov5避坑专栏后面的坑。 目录 一、Yolov5误区 二、官网…

UVM中sequence机制-数据产生及传递机制

一 基础知识 参考 UVM——sequence机制(数据激励的产生、配置方式)_uvm激励_SD.ZHAI的博客-CSDN博客https://blog.csdn.net/weixin_46022434/article/details/105600081 1.1 sequence执行流程 1.2 sequence的启动方式 1.3 sequence数据产生--body()

TortoiseGit 入门指南03:将修改提交到版本库

你现在应该已经有了一个仓库,在工作过程中会对项目做一些修改,比如添加代码、修复错误等等,你将不定时的将这些更改 提交(commit)到代码仓库。 术语 提交 是将 暂存区 内容放入 版本库 。这个过程涉及到 Git 的一些基…

如何对你的代码进行内存消耗分析

对象生命周期 下面两种创建对象的语句有什么不同呢? 对于 Object myObject;,该对象被创建在栈上,它的特点就是脱离作用域后会自动销毁。而对于 new Object(),它会在堆上动态创建一个对象,它的特点就是即使脱离作用域,该对象也会一直存在,除非你手动释放(delete)它,否…

Layui 简单介绍及入门

目录 一.Layui (国产品牌) 1.1 Layui是什么 二.比较layui和easyui,bootstrap的区别 2.1 layui和bootstrap的对比 2.2 layui和easyui对比 三.Layui入门 四.案例 一.Layui (国产品牌) 1.1 Layui是什么 用我的话来…

峟思科普:水库坝体的裂缝防治措施有哪些

水库大坝的建设与施工是一项庞大的系统工程,它包括设计、施工、监理等各个环节。而裂缝问题是整个工程中最常见的问题之一,大坝工程中出现裂缝是一件很严重的事,不仅影响大坝的使用寿命,而且严重影响水库工程的整体效益。坝体裂缝…

让GPT来聊聊目前软件测试行业的就业形式

最近两个月一直处于忙碌状态:跳槽、转行、学习新的编程语言(Python Golang)、赶工期、面试招人……也正是这一些列的经历,对目前的就业形势和软件从业人员的发展有了一些新的观察和思考,在这篇文章分享给大家。 整体…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技,为满足客户不断变化的需求,亚马逊云科技持续创新与迭代,设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作,亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

Jira Tempo :如何创建 Dynamic Dropdown 类型的 Work Attributes?

官方示例: Jira Tempo 可以创建以下类型的工作属性(Work Attributes): 其中,Dynamic Dropdown 支持外部接口,可以自己提供一个接口连接,如下: 官方示例中,给了一个 php 版本的示例…

UVM学习笔记--寄存器模型 Register Model

1.寄存器模型( Register model )简介 UVM的寄存器模型是一组高级抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模。它非常贴切的反映DUT中寄存器的各种特性,可以产生激励作用于DUT并进行寄存器功能检查。通过UVM的寄存器模型&#xf…

通信算法之176: 基于Matlab的OFDM通信系统关键基带算法设计6-流程

一. 接收算法流程 粗同步(分组检测) 载波同步(精细频偏估计) 精同步(OFDM起始,符号同步) 1.4 信道估计(长序列) 1.5 信道均衡(所有数据OFDM符号&#xff…

(黑客)自学路线

一、什么是网络安全(黑客) 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领…

基于SpringBoot+vue的准妈妈孕期交流平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

STM32——使用cubemx和keil点亮第一个灯

一、环境 cubemx安装和搭建见博文 链接: STM32CubeMX安装 keil安装见软件安装管家,注意要是MDK版 二、cubemx操作 1.打开cubemx 2.选择ACCESS TO MCU SLCTOR,创建一个新的工程。 3.选择合适的芯片型号 具体的开发板芯片型号根据自己的板子来。我的是STMF429IG 4…

AT32F435/F437 QSPI驱动华邦/恒烁 NAND FLASH(W25N01G/ZB35Q01A)

好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录 目录 一、前言 二、器件分析 三、代码分析 四、结语 一、前言 (ST生态)雅特力AT32F435/F437 QSPI驱动NAND FLASH(W25N01G/ZB35Q01A) SPI驱…

如何使用WordPress构建一个亚马逊联盟商店

您想使用 WordPress 建立亚马逊联盟商店吗? 亚马逊联盟商店允许您作为联盟会员销售亚马逊的产品,并在每次销售中赚取收入。由于启动和运营成本较低,亚马逊联营店是开展新业务和在线赚钱的最简单方法之一。 在本文中,我们将向您展…

出海企业系列风险分析--App出海注意事项

看着SHEIN、TikTok、米哈游,甚至pdd等企业在海外市场风光无限,很多公司意识到出海的彼岸有更多点石成金的机遇,于是顺势打造了一款出海APP,正当海外用户飞速增长,生意红红火火,却遇到了这样的问题&#xff…

[LangChain核心模块]模型的输入和输出->Prompts

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:人工智能。 目录 1、简介2、Prompts(提示)2.1、Prompt templates2.1.1、创建提示模板2.1.2、聊天提示模板2.1.3、…

避雷针厂家防雷接地解决方案

您是否担心您的建筑物或设施会受到雷电的侵袭?您是否想要一种高效、可靠、经济的避雷解决方案?如果是的话,那么您一定要了解我们的提前放电避雷针DK8-BX10,这是一种采用先进技术和优质材料制造的智能化避雷系统,可以为…