Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462722
  • 博文数量: 80
  • 博客积分: 2301
  • 博客等级: 大尉
  • 技术积分: 884
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:07
个人简介

I\'m interested in mathematics and Daoism. Welcome to talk about these subjects with me.

文章分类

全部博文(80)

文章存档

2017年(2)

2016年(16)

2015年(4)

2014年(6)

2013年(22)

2012年(2)

2011年(1)

2010年(4)

2009年(20)

2008年(2)

2007年(1)

我的朋友

分类: C/C++

2015-04-12 21:46:31

    pp-trace是clang编译器前端的一个工具,主要作用有二:1)作为clangLex库的PPCallbacks机制的示例  2)作为一个工具,来dump出输出预处理器的所有活动。
    在clang中,lexer只是处理同一个文件的所有字符,生成各个token,这个过程不涉及"语义",parser处理语法。另外lexer不知晓include文件,宏定义、宏展开,import等,这些工作是预处理器完成的。PPCallbacks是一个定义了很多徐函数的类,通过集成它,自定义相应的回调函数,可以hook与处理器的活动。
    头文件:$(llvm-src-install)/tools/clang/include/clang/Lex/PPCallbacks.h
    pp-trace作为一个工具,源代码目录:$(llvm-src-install)/tools/clang/tools/extra/pp-trace
    代码不过非常简单。PPCallbacksTracker类集成PPCallbacks类,并实现徐函数;此类内部有一个std::vector的引用(对象声明在main函数中)。注意:这个PPCallbacksTracker是暂时性的,所以需要把hook过程中的信息存储在这个vector中。每一个CallbackCall对象内部有一个函数名字,多个key-value对(用于存储参数信息)。
    pp-trace使用了libTooling,所以这个程序也可以作为一个学习libTooling的小例子。

   命令示例
    pp-trace t.c
    pp-trace -ignore="FileChanged"  ./t.c   #忽略FileChanged类型的事件
阅读(2345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~