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++的皮毛.还需精研.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值