首页 > 编程知识 正文

c语言graphics不存在,graph编程语言

时间:2023-05-03 05:25:39 阅读:135858 作者:244

一.基于Doxygen或lxr的API格式文档系统。

二、基于CodeViz,CodeViz是由《Understanding The Linux Virtual Memory Manager》的作者Mel Gorman编写的一种开放式源代码中的函数调用关系分析工具(类似的开放式源代码软件有egypt、ncc ) 是编译器级的分析工具。

三是基于cflow、dot (即graphviz )等系列软件。 属于源代码直接分析系统的分析工具。

四.基于egypt,支持arm,所以推荐这个。 不是给编译器打补丁,而是让编译器自己dump调用关系,分析并传递给Graphviz进行绘制。 是编译器级的分析工具。

一、略。

二、基于CodeViz,主要是Graphviz CodeViz,一个分析,一个画图。

三.基于cflow、dot(graphviz )。 适合用于源代码分析,无法从编译器的角度进行分析。 参照:

www.tiny lab.org/call graph-draw-the-call tree-of-c-functions/UTM _ source=tuicoolutm _ medium=referal

另外,cflow不能直接对目录进行recursive分析。 只支持文件分析。 这意味着您必须手动分配要分析的文件,例如cflow-B- mfib./h/fib.c./cc/fi.c./c./CCC./CCC/fi.c .

此外,如果./h/fib.c ./cc/fi.c ./ccc/fi.c中存在重复函数,则会合并这些同名函数的调用关系。 这意味着,如果./cc/fi.c包含只调用函数b的函数a,则./ccc/fi.c也包含函数b

对于cflow系列工具的使用,由于不输出图形调用关系,因此这里建议使用www.tinylab.org的组合工具: calltree。 它包含用于集成cflow和graphviz并将c函数调用树转换为dot格式的脚本。 tree2dotx :以Ubuntu为例安装各自。

$ sudo apt-getinstallcflowgraphviz

$ wget-c https://github.com/tiny club/Linux-0.11-lab/raw/master/tools/tree2dotx

$ wget-c https://github.com/tiny club/Linux-0.11-lab/raw/master/tools/call graph

$ sudocptree2dotxcallgraph/usr/local/HPD my

$ sudochmodx/usr/local/HPD my/{ tree2dotx,callgraph}

$ sudo apt-get安装指南

我已经把tree2dotx和callgraph放在自己的云盘里了

使用方法:

$ call graph-f start_kernel-dinit/main.c #仅在init/main.c文件中打印函数start _ kernel中的所有调用关系图

$ call graph-f start _ kernel-dinit/main.c-fprintk #允许您筛选不需要用-f打印的函数

$ call graph-f start _ kernel-dinit/main.c-f ' printk boot _ CPU _ initrest _ init ' #过滤不需要在-f上打印的多个函数

$ call graph-f start _ kernel-dinit/main.c-f ' printk boot _ CPU _ initrest _ init '-D2 #在-d中指定函数的搜索深度(

由于名为callgraph的脚本也不能递归统计目录(也不能cflow ),因此callgraph无法通过* (全部匹配)方法工作,但cflow可以通过*方法匹配所有文件

$ call graph-f start _ kernel-dinit/* $ cflow-B-mmainexample/*|/usr/local/HPD my/tree2dotx2/dev/null|ff #如果有目录,则为$ cflow-b example/*|/usr/local/HPD my/tree2dotx2/dev/null|dot-tssl

r/local/hpdmy/tree2dotx -f "printk boot_cpu_init rest_init" 2>/dev/null | dot -Tsvg -o ./main.svg # 可以过滤掉 printk boot_cpu_init rest_init 函数的显示

因此有两种方法可以做到统计目录里的所有文件:一是修改callgraph这个脚本;二是手动列出example目录下的所有文件(包含子目录)输给cflow。

趣玩 tree2dotx

打印目录结构:

$ tree -L | tree2dotx | dot -Tsvg -o tree.svg

四、基于egypt

注意,可以在CFLAGS中加入的-O0参数,禁止编译器优化。如果不禁止优化,有些函数可能会因为优化的关系而显示不出来。

编译时加入:

CFLAGS = $(CFLAGS) -fdump-rtl-expand

编译结束后,假设所有的 expand文件都位于 expand_dir 目录,则可以这样生成dot文件:

egypt expand_dir/* > example.dot若只想用一部分文件来生成调用图,则可以指定文件:

egypt expand_dir/f1.c.144r.expand expand_dir/f2.c.184r.expand > example.dot

然后生成svg图片:dot example.dot -Tsvg -o example.svg

用 -Tpng 替换 -Tsvg 可以生成png图片,不过建议生成svg图片,因为它缩放不变形不模糊。

注意:如果函数太多,dot转换后的图片太大会打开失败,遇到这种情况可以使用dot的plain或者plain-ext格式来保存为纯文本(文本里的node指的是节点,edge指的是边,即指向),然后在纯文本里找到那些不需要的函数,重新用egypt的--omit去掉一些不需要的函数,直到dot转换后的图片能打开为止。或者直接看plain文本也可以。  纯文本里面的 solid ellipse black lightgrey 这些颜色、形状表示的是node或者edge的特征。

egypt 的命令格式:

egypt [--omit function,function,...] [--include-external] ... | xbdl -

egypt [--omit function,function,...] [--include-external] ... | dot

omit

Omit the given functions from the call graph. Multiple function names may be given separated by commas.

include-external

Include calls to external functions in the call graph. A function is considered external if it is not defined in any of the input files. For example, functions in the standard C library are external. Only direct function calls will be displayed; there is no way to display the action of taking the address of an external function.

分析函数调用关系图(call graph)的几种方法

绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call sta ...

用CodeViz绘制函数调用关系图(call graph)

CodeViz是(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...

用callgraph生成的函数调用关系图

Wu Zhangjin 创作于 2015/04/05 评论打赏 By Falcon of TinyLab.org 2015/04/03 1 故事缘由 源码分析是程序员离不开的话题.无论是研究开源项目, ...

用callgraph生成的两张函数调用关系图

参考这里,感觉很Cool吧. Linux-0.11函数调用关系图: QEMU函数调用关系图:

python函数调用关系图(python call graph)

由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具.(内网没装好graphviz,还没真正用 ...

[转] 使用CodeViz生成C/C++函数调用关系图

运行环境:虚拟机下的Ubuntu 11.04 结合Graphviz工具,使用CodeViz可以生成直观和漂亮的C/C++程序函数之间的调用关系图. 1.安装graphviz 在安装CodeViz之前, ...

使用Idea当中的快捷键快速查看继承关系或其图表的两种方法

一.Idea当中有两种方法可以查看继承关系 在Idea当中选中一个类,然后按Ctrl+H,可以快速查看当前所选类的继承关系,如下图: ​ 同样选中一个类,按CTRL+ALT+U,即可生成当前类的继承关 ...

C语言不使用加号实现加法运算的几种方法

今天看到的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...

华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)

题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...

随机推荐

x-editable 的使用方法

1.首先在html网页中定义一个a标签(如下是asp.net的语法)

JS 保留小数点后面2位小数

1. 最笨的办法....... [我就怎么干的.........] function get(){    var s = 22.127456 + "";    var str = ...

ORA-01036: 非法的变量名/编号 解决方案

今天又一次遇到了 ORA-01036: 非法的变量名/编号 的问题,之前在项目中也遇见过这个问题,但是具体怎么解决的忘记了,今天又是遇见了,花了半个小时才解决.我今天遇到的情况是这样的: 存储过程中有 ...

poj-2337(欧拉回路输出)

题意:给你n个字符串,每个字符串可以和另一个字符串连接的前提是,前一个字符串的尾字符等于后一个字符串的首字符,问你存不存在欧拉通路并输出 解题思路:基本标准流程,建图:把一个字符串可以看作一条首字符指 ...

day05流程控制while循环 流程控制for循环

1.什么是循环:循环就是重复做某事 2.为何要有循环:为了计算机能够具备人重复做某事的能力 3,.如何用循环: 1.结束while循环的两种方法:1.修改条件:等到下一次循环开始时判断,条件为假才会结 ...

Vue--项目开发之实现tabbar功能来学习单文件组件2

上一篇文章里item.vue里的span标签内容是写死了,但是我们不希望写死 所以对于五个tab选项的标题需要从外部传入,也就说 需要在item.vue里的script里写上 export defau ...

Win7 VS2013环境使用cuda_7.5.18

首先得吐槽下VS2015出来快一年了CUDA居然还不支持,没办法重装系统刚从2013升到2015,还得再装回一个2013用,只为学习CUDA... 然后安装的时候,如果你选择自定义组件安装,注意不要改 ...

svn其它

参考地址: http://www.cnblogs.com/mymelon/p/5483215.html

python写入csv文件的几种方法总结

生成test.csv文件 #coding=utf- import pandas as pd #任意的多组列表 a = [,,] b = [,,] #字典中的key值即为csv中列名 dataframe ...

JS踩过的坑

一:DOM对象的查找 DOM的查找到的对象,除byID的之外,返回的都是一个数组,并不是DOM对象无法调用DOM对象的方法. 通过id查找: 因为id在一个HTML文件中唯一,因此查找到的只会是一个元 ...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。