关于代码阅读分析工具的思考
每当阅读逻辑复杂的代码时,首先都想弄清函数之间的调用关系,然后想在适当的位置打上断点(或者移除断点),或者想看看某个函数被调用了多少次。很多代码阅读器、编辑器都已经提供了这些基本的功能,甚至提供的功能比我们想象的要强大很多,下图为SourceInsight和VS2012的函数调用关系图。但有时候总不能满足我们的所有需求。其中有一种情况是代码分析工具都是基于静态分析(有动态的吗?),无法确定函数的调用顺序。所以我乐此不疲的写一个又一个版本的调试代码,如果把VS的调试功能比做大海,我的代码只是浪花,但是浪花也有美的一瞬间。
要实现的功能
1) 能直观的输出程序运行过程中函数的调用关系。主要技术是记录调用栈的信息。
2)统计函数被调用的次数。
3)可以很方便的给某些函数下断点。
4)对源码的修改尽量少。
在上面所述的四点中,第4条尤为重要,如果在函数里面加入过多的调试代码,即增加了维护的工作量,又破坏了代码原来的结构。我以前写过很多个版本的调试代码,有一个技术问题一直困扰着我。为了记录调用栈的信息,我在函数的开头插入一条代码ÿ