LinuxDev 板


LINE

原文网址: http://bit.ly/etmDwY [2]CallGraphviz – call graph visualzer based on csope, graphviz and xdot 开源工具现状 许多开发者都有介入中大型专案的经验,常必须试图理解原始程式的设计,或多或少都有 在程式码迷宫中找路的经验。有些专案,程式码结构严谨,软体设计应用 [3]Design Patterns. 见名称、参数即可推断程式结构,阅读如沐春风。 但若碰到未经重构的成年老专案,程式逻辑因为年久失修,塞满各个开发阶段的临时解决 方案,常常已经复杂到难以一眼望穿理解。若是像记忆力虚弱如我,常常追了後面几千行 、跳了三个档,就忘了前面几个档案的函式名称。於是常常辅助纸本画流程图,但是手绘 图往往不敌跳来绕去的程式码逻辑。还是得靠[4]程式码解析视觉化工具来协助理解。 绘制[5] Call Graph 的工具非常多,一般可以分作 [6]Dynamic analysis 与 [7]Static analysis 两种做法。在台湾,最知名的商业版本工具,大概是 [8]Source Insight。不过 我不用 Windows,对於缺乏原始码的开发工具兴趣也不大。 开源的 Dynamic analysis 有像是 [9]Jserv [10]介绍过的 [11]CodeViz 或是 [12]ncc。 不过这类工具需要 patch gcc,不特别适合嵌入式系统专案。因?原始码常常只支援特定 平台,或是无法取得编译工具原始码,此外不同版本的 compiler 偶尔会造成不同的问题 ,造成使用上的困难。 一种比较乾净的做法是像 [13]KCachegrind 利用 [14]valgrind 来收集资料,或 [15] Gprof2Dot 利用 [16]gprof 的输出资料。再者是利用 gcc 的[17]除错功能,把 internal representation (RTL) 倒出来,再用[18]egypt 或 [19]Python-RTL 来判读或绘图。 至於 [20]Static analysis 有[21]Fred Chien [22]介绍过的 [23]cflow 或是 [24] Doxygen 也有类似的[25]绘图功能。也有工具是配合 [26]cscope 或 [27]global,例如有 人帮 CScope 刻过[28]图形界面,Vim 有个 [29]CCTree 可用。 CallGraphviz 以上这些工具各有优缺点。 最常见的问题是许多工具无法处理 [30]function pointer / [31]dynamic dispatch,最 终还是要人力介入。另外一个使用上的困扰是,这些程式会一口气画出整个程式码的结构 图。 太多资讯其实妨碍理解,因?用途常常只是追一个臭虫,程式开发者只想画出特定路径来 厘清问题。而context-sensitive 的 call graph 测试工具又耗费资源。 若用 [32]CodeLite, [33]Code Blocks , [34]Eclipse CDT 等开发工具,工具已经内建或 整合 [35]cscope /[36]global,提供 symbol lookup 功能,於是开发者很容易用滑鼠查 阅函式定义或实做,或也可以搭配 [37]LXR 来浏览程式码。已经不需要像是 [38] cbrowser 专属的程式码浏览工具[39]。 所以需要的是可以手动的将目前程式情境视觉化的工具,网路上已经有其他开发者做了 [40]Bash: C Call Trees and Graphs 或是 [41]Global-calltree。或是像 [42]ypwang 的[43]方法,记录函式进出点,再手动绘图。 这些工具大多是整合 shell scripts,操作上有点不便。另外我也不喜欢 Call Tree 的图 式,因?树状图无法表现递回或交互关系。 於是查找一下,决定拿 [44]cscope 加上 [45]Graphviz 的 [46]DOT 语法来用,改了一个 [47]CallGraphviz。它的功能是一个 Graphviz 前端,後端还是使用 cscope 查 symbols ,为了可以即时浏览就拿了 [48]xdot 当作界面。[49]xdot 是以 [50]PyGtk 开发,非常 容易更改,不到三百行就加入我需要的功能。 [51][screenshotcodevisualize-300x179] 使用方法 ? python visualizer.py ? 按下 “New”, 选择要分析 C/C++ 专案目录。 ? 於 “Search symbol” 键入要追踪的函式名称。 ? 每次键入新名称,他会自动对应图中已输入函式是否? caller or callee,并自动画 图。 [52]CallGraphviz 可以将绘图结果存成 dot 格式档案,然後再利用 [53]dot 指令转换格 式。不过它只是把曾经查过的名称记录起来,开启时重新查 cscope 而已,若图大时,每 次开启可能会十分缓慢。 原始码可於 github 下载,授权采用 GNU Lesser General Public License. ? [54]https://github.com/chihchun/callgraphviz 延伸阅读 [55] Python Call Graph References: [1] http://people.debian.org.tw/~chihchun [2] http://people.debian.org.tw/~chihchun/2011/03/30/callgraphviz/ [3] http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 [4] http://en.wikipedia.org/wiki/Program_analysis [5] http://en.wikipedia.org/wiki/Call_graph [6] http://en.wikipedia.org/wiki/Dynamic_program_analysis [7] http://en.wikipedia.org/wiki/Static_program_analysis [8] http://www.sourceinsight.com/ [9] http://blog.linux.org.tw/~jserv/ [10] http://blog.linux.org.tw/~jserv/archives/001723.html [11] http://www.skynet.ie/~mel/projects/codeviz/ [12] http://students.ceid.upatras.gr/~sxanth/ncc/ [13] http://kcachegrind.sourceforge.net/ [14] http://valgrind.org/ [15] http://code.google.com/p/jrfonseca/wiki/Gprof2Dot [16] http://sourceware.org/binutils/docs/gprof/ [17] http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html [18] http://www.gson.org/egypt/ [19] http://rtlcheck.sourceforge.net/using.html [20] http://en.wikipedia.org/wiki/Static_program_analysis [21] http://fred-zone.blogspot.com/ [22] http://fred-zone.blogspot.com/2009/09/trace-cflow.html [23] http://www.gnu.org/software/cflow/ [24] http://www.stack.nl/~dimitri/doxygen/ [25] http://www.stack.nl/~dimitri/doxygen/diagrams.html [26] http://cscope.sourceforge.net/ [27] http://www.gnu.org/software/global/ [28] http://en.wikipedia.org/wiki/Cscope#GUI [29] http://www.vim.org/scripts/script.php?script_id=2368 [30] http://en.wikipedia.org/wiki/Function_pointer [31] http://en.wikipedia.org/wiki/Dynamic_dispatch [32] http://codelite.org/ [33] http://www.codeblocks.org/ [34] http://www.eclipse.org/cdt/ [35] http://cscope.sourceforge.net/ [36] http://www.gnu.org/software/global/ [37] http://lxr.linux.no/+trees [38] http://www.ziplink.net/~felaco/cbrowser/ [39] http://www.ziplink.net/~felaco/cbrowser/ [40] http://toolchainguru.blogspot.com/2008/07/bash-c-call-trees-and-graphs.html [41] http://stackoverflow.com/questions/2027508/simple-tool-for-callgraph-in-c [42] http://www.ypwang.info/ [43] http://www.ypwang.info/2010/10/call-graph.html [44] http://cscope.sourceforge.net/ [45] http://www.graphviz.org/ [46] http://www.graphviz.org/content/dot-language [47] https://github.com/chihchun/callgraphviz [48] http://code.google.com/p/jrfonseca/wiki/XDot [49] http://code.google.com/p/jrfonseca/wiki/XDot [50] http://www.pygtk.org/docs/pygtk/index.html [51] http://img714.imageshack.us/i/screenshotcodevisualize.png/ [52] https://github.com/chihchun/callgraphviz [53] http://www.graphviz.org/cgi-bin/man?dot [54] https://github.com/chihchun/callgraphviz [55] http://pycallgraph.slowchop.com/ -- http://people.debian.org.tw/~chihchun/ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.53.166 ※ 编辑: rextsai 来自: 112.104.53.166 (03/31 14:42)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP