转载请注明出处
CodeViz 是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的开源工具。其基本原理是给 gcc 打个补丁,使其在编译源码时将函数调用的信息输出,之后再用 perl 脚本收集整理这些信息,最后调用 Graphviz 绘制函数调用关系图。(这么看来学会 Graphviz 绘图还真是一项硬技能,毕竟代码还是读了之后才能有更深的理解,而且自动生成的东西在很多情况下往往不合要求,比如冗余信息过多,或者排版很差。)
本文主要介绍如何(在 64 位系统上)编译打好补丁的 gcc。
CodeViz 最新的版本是 1.0.12,在CodeViz 官网(这个应该是官网吧……)可以下到。压缩包不大,里面当然没有包含 gcc 代码包,gcc 的源代码需要另外下载。
该版本的 CodeViz 支持 gcc-4.6.2 和 gcc-3.4.6。在本文中,鄙人编译的是 gcc-4.6.2,可以从 GNU 官网上下载,也可以从科大源下载。
执行的基本步骤如下:
- 将 CodeViz 解压。(假设解压到了 codeviz 目录下)
- 将下载好的 gcc-4.6.2.tar.gz 存放到 codeviz/compilers 目录下。
- 为了编译的顺利进行,根据页面Debian Bug report logs – #682678中的说明,要在 configure 之前运行下面代码(鄙人也是因为在后面的编译中遇到了麻烦的问题,在春哥帮助下,总算找到该解决方法):
按照官方文档的说明,现在只要在 codeviz 目录下执行 ./configure & make & makeinstall 就可以了。但其实还有问题,容我慢慢说来。
$ LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch) $ CPATH=/usr/include/$(gcc -print-multiarch) $ export LIBRARY_PATH CPATH
但是在使用之前还要对这个脚本进行一些改动(行首的加减号代表增删):
- ../gcc-4.6.2/configure --prefix=$INSTALL_PATH --enable-shared --enable-languages=c,c++ || exit + ../gcc-4.6.2/configure --prefix=$INSTALL_PATH --enable-shared --disable-multilib --enable-languages=c,c++ || exit - PLATFORM=i686-pc-linux-gnu + PLATFORM=x86_64-unknown-linux-gnu
1. 配置 CodeViz
$ ./configure --prefix=[path_to_install_gcc-graph]
2. 执行 install_gcc-4.6.2.sh 脚本
$ compilers/install_gcc-4.6.2.sh
耐心地等上几十分钟吧,你的 gcc 正在紧张制作中。
【本文参考】在ubuntu 13.04 64位安装codeviz 1.0.12 以及 Debian Bug report logs – #682678