代码测试、调试与优化小结

来源:互联网 发布:javascript 资源 网盘 编辑:程序博客网 时间:2024/05/01 21:24

1.2 函数调用关系图 calltree

calltree可以非常简单方便地反应一个项目的函数调用关系图,虽然诸如gprof这样的工具也能做到,不过如果仅仅要得到函数调用图,calltree应该是更好的选择。如果要产生图形化的输出可以使用它的-dot参数也可以参考资料[12]。从这里可以下载到它,ftp://ftp.berlios.de/pub/calltree/calltree-2.3.tar.bz2
关于calltree的实现原理,可以参考资料[13],关于它的详细用法请参考资料[14]或者它的-h参数获取帮助。

这里是一份演示结果,
$ calltree -b -np -m *.c
main:
|   close
|   commitchanges
|   |   err
|   |   |   fprintf
|   |   ferr
|   |   ftruncate
|   |   lseek
|   |   write
|   ferr
|   getmemorysize
|   modifyheaders
|   open
|   printf
|   readelfheader
|   |   err
|   |   |   fprintf
|   |   ferr
... 


这样一份结果对于“反向工程”应该会很有帮助,它能够呈现一个程序的大体结构,对于阅读和分析源代码来说是一个非常好的选择。虽然cscope和ctags 也能够提供一个函数调用的“即时”(在编辑vim的过程中进行调用)视图(view),但是calltree却给了我们一个宏观的视图。

不过这样一个视图只涉及到用户空间的函数,如果想进一步给出内核空间的宏观视图,那么strace和KFT就可以发挥它们的作用。关于这两个工具请参考条目[11]列出的相关资料。另外,该视图也没有给出库中的函数,如果要跟踪呢?需要ltrace工具。

0 0
原创粉丝点击