首先SSH不是一个如何阅读框架源碼,而是多个如何阅读框架源码(struts+spring+hibernate)的集成是目前较流行的一种Web应用程序开源集成如何阅读框架源码,用于构建灵活、易于扩展的多层Web應用程序
集成SSH如何阅读框架源码的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
Struts作为系统的整体基础架构负责MVC的分离,在Struts如何阅读框架源码的模型部分控制业务跳转,利用Hibernate如何阅读框架源码对持久层提供支持Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系另一方面能使Struts和Hibernate更好地工作。
由SSH构建系统的基本业务流程是:
得到每个函数的调用地址信息苼成一个trace文件,
然后利用 addr2line 和 c++filt 将 函数名及其所在源码位置 从地址中解析出来
然后按下面编译( instrument.c 在上面github地址中可以下载,用于注入地址信息):
图上标注含义在Karma的答案有说明我就不再重复了
可以让编译器在每个函数的开头和结尾
这两个函数的实现由用户定义
显然,假如我们把所有的 调用方和被调用方的地址 都打印出来就可以得到一张完整的运行时Call Graph因此,我们 instrument.c 实现如下:
以上几个函数的作用就是
将所有的 调用方和被调用方的地址 写入 trace.txt 中然而现在有一个问题,就是 trace.txt 中保存的是地址我们如何将地址翻译成源码中的符号?
以上面ABCTest.cpp工程为例比如峩们现在有地址 0x400974,输入一下命令
第一行该地址所在的函数名第二行为函数所在的源码位置
然而,你一定会问_ZN1A4AOneEv是什么鬼?
为实现重载、命名空间等功能因此C++有
,因此函数名是不可读的
结果是不是就清晰很多:
最后用 pygraphviz 将 每一条调用关系 画出来即可版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。