首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

AspectC++的施用

2013-02-15 
AspectC++的应用最近需要研究一个开源软件中协议的流程与实现,由于协议比较复杂,程序层次架构设计耦合严重

AspectC++的应用

最近需要研究一个开源软件中协议的流程与实现,由于协议比较复杂,程序层次架构设计耦合严重,用wireshark抓包分析+log或者gdb跟踪代码效率都不高.想到之前java项目用过一种切面编程,可以在函数开始或结束等地方自动添加代码,而且有比较灵活的控制方式.当时注意到CPP也有这种编程的实现,于是琢磨着用到此项目中来.

项目主页:http://www.aspectc.org/

直接下编译链接好的linux下的包,然后开始编例子.

编译出现麻烦点,编译器报错:

sorry, unimplemented: inlining failed in call to ...

查看了一下源文件,是编译器不识别类似于下面的定义:

__attribute((always_inline)) inline void xxx ();

google了一番,找到解决方法:http://gcc.gnu.org/ml/gcc-help/2007-01/msg00051.html

加上-funit-at-a-time编译选项.

尝试在项目里使用.

改makefile,照葫芦画瓢,按照例子改就是.

写ah文件,最简单的用例:

使用% %::%::%(...)匹配几乎所有namespace里的所有类的所有函数.(使用% %::%(...)匹配所有类的所有函数)

发现编译某些文件时,会生成带%的函数名,编译不通过,怀疑ag++生成函数名的时候有bug.遍寻不知解.

只好把匹配串改成:

% AAA::BBB::%(...)

使用JoinPoint::signature()打印所属函数名.

费了点功夫,但是编译通过,运行无碍.能看到程序的基本运行流程了.

只能算用了AspectC++的皮毛.还需精研.

热点排行