- 浏览: 1478314 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
以下是c的版本
c++代码去 http://www.cnblogs.com/lanxuezaipiao/p/3450201.html
codeviz似乎只能支持gcc4.6,好久没更新了,
看这个
https://github.com/Cheukyin/CodeSnippet/tree/master/python/SRCGraphviz/
目标建立 nginx的运行流程
参考
https://www.ibm.com/developerworks/cn/linux/l-graphvis/
参考《深入剖析nginx》
javascript生成绘制.dot
参考
http://stackoverflow.com/questions/6344318/pure-javascript-graphviz-equivalent/14866384
参考
http://graphviz.org/content/cluster
my_debug.h
my_debug.c
把my_debug.c和my_debug.h放到nginx的src/core/目录下
./configure后修改ojbs/Makefile文件
make&&make install后
启动nginx,生成
/usr/local/nginx/sbin/trace.txt
文件类似
可以addr2line 40ad4b -e nginx -f
查看地址对应的函数名
使用
https://www.ibm.com/developerworks/cn/linux/l-graphvis/
中的pvtrace
修改代码
symbols.h 中的
否函数太多会报错
stack.c里面也有个改成
pvtrace nginx
会得到
graph.dot
dot -Tpng graph.dot -o graph.png
如果.dot文件有??则是地址没识别出来,
就一两个,删除即可
也可以生成jpg,
这个.dot也可以用
生成svg的图
根据dot的格式生成svg图的js为
结果如图
2017.8.15 nginx-1.13.4
附件中
graph.dot.jpg 下载后改成graph.dot用文本打开可以看到dot文件内容
nginx.conf前面要加上
master_process off;
c++代码去 http://www.cnblogs.com/lanxuezaipiao/p/3450201.html
codeviz似乎只能支持gcc4.6,好久没更新了,
看这个
https://github.com/Cheukyin/CodeSnippet/tree/master/python/SRCGraphviz/
目标建立 nginx的运行流程
参考
https://www.ibm.com/developerworks/cn/linux/l-graphvis/
参考《深入剖析nginx》
javascript生成绘制.dot
参考
http://stackoverflow.com/questions/6344318/pure-javascript-graphviz-equivalent/14866384
参考
http://graphviz.org/content/cluster
my_debug.h
#ifndef MY_DEBUG_LENKY_H #define MY_DEBUG_LENKY_H #include <stdio.h> void enable_my_debug( void ) __attribute__((no_instrument_function)); void disable_my_debug( void ) __attribute__((no_instrument_function)); int get_my_debug_flag( void ) __attribute__((no_instrument_function)); void set_my_debug_flag( int ) __attribute__((no_instrument_function)); void main_constructor( void ) __attribute__((no_instrument_function,constructor)); void main_destructor( void ) __attribute__((no_instrument_function,destructor)); void __cyg_profile_func_enter( void *,void * ) __attribute__((no_instrument_function)); void __cyg_profile_func_exit( void *,void * ) __attribute__((no_instrument_function)); #ifndef MY_DEBUG_MAIN extern FILE *my_debug_fd; #else FILE *my_debug_fd; #endif #endif
my_debug.c
#include <stdio.h> #include <stdlib.h> /* Function prototypes with attributes */ void main_constructor( void ) __attribute__ ((no_instrument_function, constructor)); void main_destructor( void ) __attribute__ ((no_instrument_function, destructor)); void __cyg_profile_func_enter( void *, void * ) __attribute__ ((no_instrument_function)); void __cyg_profile_func_exit( void *, void * ) __attribute__ ((no_instrument_function)); static FILE *fp; void main_constructor( void ) { fp = fopen( "/usr/local/nginx_sendfile/sbin/trace.txt", "w" ); if (fp == NULL) exit(-1); } void main_deconstructor( void ) { fclose( fp ); } void __cyg_profile_func_enter( void *this, void *callsite ) { fprintf(fp, "E%p\n", (int *)this); } void __cyg_profile_func_exit( void *this, void *callsite ) { fprintf(fp, "X%p\n", (int *)this); }
把my_debug.c和my_debug.h放到nginx的src/core/目录下
./configure后修改ojbs/Makefile文件
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g3 -finstrument-functions ... 18 CORE_DEPS = src/core/nginx.h \ 19 src/core/my_debug.h \ ..... 84 HTTP_DEPS = src/http/ngx_http.h \ 85 src/core/my_debug.h \ .... 105 objs/nginx: objs/src/core/nginx.o \ 106 objs/src/core/my_debug.o \ ...... 216 $(LINK) -o objs/nginx \ 217 objs/src/core/nginx.o \ 218 objs/src/core/my_debug.o \ ...... 329 modules: 331 objs/src/core/my_debug.o: $(CORE_DEPS) src/core/my_debug.c 332 $(CC) -c $(CFLAGS) $(CORE_INCS) \ 333 -o objs/src/core/my_debug.o \ 334 src/core/my_debug.c
make&&make install后
启动nginx,生成
/usr/local/nginx/sbin/trace.txt
文件类似
[root@haoning sbin]# head trace.txt E0x403f88 E0x41f5ac X0x41f5ac E0x403f88 X0x403f88 E0x410425 E0x40ff83 E0x40fa71 X0x40fa71 E0x40ad4b
可以addr2line 40ad4b -e nginx -f
查看地址对应的函数名
使用
https://www.ibm.com/developerworks/cn/linux/l-graphvis/
中的pvtrace
修改代码
symbols.h 中的
13 #define MAX_FUNCTIONS 20000 14 #define MAX_FUNCTION_NAME 5000
否函数太多会报错
stack.c里面也有个改成
#define MAX_ELEMENTS 500
pvtrace nginx
会得到
graph.dot
dot -Tpng graph.dot -o graph.png
如果.dot文件有??则是地址没识别出来,
就一两个,删除即可
也可以生成jpg,
这个.dot也可以用
生成svg的图
根据dot的格式生成svg图的js为
<html> <head> <meta charset="utf-8"> <title>Viz.js</title> </head> <body> <script type="text/vnd.graphviz" id="cluster"> digraph G { subgraph cluster_0 { style=filled; color=lightgrey; node [style=filled,color=white]; a0 -> a1 -> a2 -> a3; label = "process #1"; } subgraph cluster_1 { node [style=filled]; b0 -> b1 -> b2 -> b3; label = "process #2"; color=blue } start -> a0; start -> b0; a1 -> b3; b2 -> a3; a3 -> a0; a3 -> end; b3 -> end; start [shape=Mdiamond]; end [shape=Msquare]; } </script> <script src="viz.js"></script> <script> function inspect(s) { return "<pre>" + s.replace(/</g, "<").replace(/>/g, ">").replace(/\"/g, """) + "</pre>" } function src(id) { return document.getElementById(id).innerHTML; } function example(id, format, engine) { var result; try { result = Viz(src(id), format, engine); if (format === "svg") return result; else return inspect(result); } catch(e) { return inspect(e.toString()); } } document.body.innerHTML += "<h1>Cluster (svg output)</h1>"; document.body.innerHTML += example("cluster", "svg"); </script> </body> </html>
结果如图
2017.8.15 nginx-1.13.4
附件中
graph.dot.jpg 下载后改成graph.dot用文本打开可以看到dot文件内容
nginx.conf前面要加上
master_process off;
发表评论
-
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2444这个需要注意 https://stackoverflow.c ... -
nginx push_upstream模块的websocket
2018-05-04 23:27 1222参考 https://www.rails365.net/art ... -
openresty聊天室的helloworld
2018-04-22 19:25 801openresty的websocket + redis的sub ... -
openresty websocket
2018-04-18 17:08 1521mac安装openresty brew install o ... -
nginx模块开发(三)upstream模块
2017-08-20 23:48 846使用nginx-1.13.4版本 三个文件ngx_http_ ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2010gdb-dashboard或者 gdbgui 或者gdb自带 ... -
nginx模块开发(一)
2017-07-29 22:44 566决定重新整理nginx模块开发 helloworld con ... -
nginx带进度条的上传超大文件
2016-12-12 18:40 387311年写的 http://haoningabc.iteye.c ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 836清理chrome的缓存 chrome://appcache-i ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4362假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659664位操作系统centos7 ############ 1.一 ... -
nginx执行流程
2014-04-15 18:35 1082目标:打印nginx执行之后的流程方法 my_debug.c ... -
nginx的远程调用模块
2014-03-24 14:31 2770在tx工作的时候,自己的虚拟机总是连接不上,公司封了ssh端口 ... -
通过nginx远程执行shell
2014-03-03 10:26 5087saltstack远程执行shell,远程管理等返回json已 ... -
nginx的upstream模块
2014-01-17 17:37 3205参考http://nginx.weebly.com/31034 ... -
nginx调试日志的几种方法
2013-10-17 22:54 23316最简单的方式就是 fprintf(stderr, &qu ... -
nginx HttpSecureLinkModule 过期token验证模块
2012-11-07 02:15 6087用途,确认一个链接比如下载pdf,在一定有效期内有用 可以加 ... -
nginx 上传进度条
2012-11-01 16:24 7613费劲周折,一晚上终于搞定了,nginx版本1.38 ----- ... -
ubuntu装openrestry
2012-03-01 00:16 1333apt-get install make apt-get in ... -
udp的socket的helloworld
2011-12-07 00:56 1101来自百度 [root@red54apple test]# ...
相关推荐
看源码的时候,心血来潮想弄一下函数之前的调用关系,想起以前doxygen配合graphviz使用可以生成比较直观的函数调用关系图,但是前提是函数的注释需要严格按照doxygen的规范,具体可以自己去搜索一下,当然使用source ...
6. **Graphviz**:Graphviz是一个开源图形渲染库,用于绘制各种图表,包括函数调用图。开发者可以通过定义图的结构,然后用Graphviz生成图形。 7. **代码分析**:自动生成函数调用关系图的工具通常会分析源代码的...
Graphviz是一个图形可视化软件,它可以用来绘制各种图形,例如函数调用关系图。HtmlHelp是一个帮助文件生成器,可以将生成的文档转换为HTML格式,方便在网页上查看。 首先,文档指出在安装Doxygen、Graphviz和...
这段代码将决策树模型转换为DOT语言,并使用Graphviz的`Source`类创建一个图对象,最后调用`view`方法在默认的图形查看器中显示决策树。 标签"机器学习 决策树"表明了这个主题的核心内容,即如何在机器学习项目中...
自动生成c++函数调用关系图,里面包含了所有要用到的软件,一站式服务; 通过本人亲测的使用总结; 还有使用到的配置文件(c++的),实在不会配置可以直接使用; 改一改配置文件,应该还可以生成c,java,c#语言的调用...
Kingraph是一款基于JavaScript和Graphviz的库,专用于创建和展示家族树或其他关系图。它结合了两种技术的优势,提供了一种动态、交互式的可视化解决方案。在这个项目中,我们将深入探讨如何利用Kingraph来绘制家族树...
用doxygen+graphviz自动化生成函数调用流程图文件配置
调用图以节点(函数)和边(调用关系)的形式展示,每个节点表示一个函数,每条边表示一个函数调用另一个函数的动作。 三、egypt的使用步骤 1. 安装与配置:下载egypt-1.10压缩包,解压后根据提供的README文件进行...
《使用Graphviz绘制二叉树详解》 在计算机科学领域,二叉树是一种常见的数据结构,它被广泛应用于各种算法和问题解决中。为了更好地理解和分析二叉树,可视化工具显得尤为重要。Graphviz是一个强大的开源图形渲染库...
通过以上步骤,你可以在C#程序中使用Graphviz来绘制函数流程图。需要注意的是,Graphviz支持多种布局算法,如`dot`、`neato`、`circo`等,可以根据需求选择合适的算法。同时,Graphviz还支持丰富的图形语法,允许你...
现在的软件源代码动则千万行,初学者常常感到迷惘,如果能自动生成关键函数的调用关系图,则思路可以清晰许多。如下面这幅图展示了WebKit网页渲染的部分函数执行过程,比单纯地看代码直观多了。 ...
Graphviz是一个强大的开源图形绘制工具,特别适合于创建流程图、网络图、UML模型以及许多其他类型的图表。它使用一种特定的领域特定语言(DSL),名为DOT语言,来描述图形结构,然后自动生成高质量的可视化图像,...
在 Linux 环境下,借助工具 Code Vize 可提取出开源软件中函数以及函数之间的依赖关系,并将分析结果以文本形式输出到文件中,然后借助于可视化工具 Graphviz 可将节点以及节点之间的依赖关系以图形化的方式 展示...
在C语言编程中,理解函数调用关系是调试和优化代码的关键...总的来说,利用egypt和GCC的-fdump-rtl-expand选项生成Graphviz图是一种有效的可视化C语言函数调用关系的方法,可以帮助开发者更深入地理解代码的运行逻辑。
Graphviz则专注于生成各种流程图和网络图,包括函数调用关系图。 总之,C++源代码自动分析工具是软件开发过程中的重要辅助工具,它们帮助开发者快速理解和管理复杂的代码结构。通过生成UML类图和函数调用关系图,...
本文将详细介绍如何使用Python调用graphviz来绘制结构化的图形网络。 首先,要使用graphviz,你需要先在官网下载并安装Graphviz软件。安装完成后,确保将其安装目录下的`bin`路径添加到系统的环境变量中,这样...
要使用该方法,要先安装gcc,python2.7,绝对可行,选择某一源文件,即可调用。源码内设路径可自行调整。
"Go-Gocyto-Go的调用图(Callgraph)分析和可视化"是针对Go程序的一种高级调试和分析工具,它可以帮助开发者更直观地看到函数之间的调用关系,从而提高代码质量和维护性。 调用图(Callgraph)是一种图形表示形式,...
3. **生成图形**:分析完成后,CodeViz将生成一个或多个图形文件,如.dot或.svg格式,这些文件可以用图形查看器打开,如Graphviz,展示调用关系图。 4. **交互式查看**:一些版本的CodeViz可能还提供交互式的Web...
"graphv"可能是指Graphviz,这是一个开源图形绘制软件,常被用作Doxygen的插件,用于绘制复杂的图表,如函数调用图。"htmlhe"可能是“HTML help”的缩写,与前面提到的CHM文件相关。 压缩包内的文件名称列表虽然未...