Clang前端:跟踪语句的读写

时间:2018-07-05 16:37:54

标签: c clang frontend abstract-syntax-tree

我正在使用clang libTooling编写一个小工具,我想跟踪函数变量的读写。对于使用int x = 4;的{​​{1}}或d = x + y;形式的简单语句,我可以这样做。现在考虑一下此功能:

ASTMatchers

void fun(int *ptr) { int x = 20; int i = 2; ptr[++i] = x + 45; //line 4 and assuming ++i is a valid index //line 4: Reads{i, x} and writes{ptr, i} } 的第4行将转换为:

AST

问题很简单,是否有办法跟踪每一行的所有读取/写入?对所有可能的不同表达形式尝试 | `-BinaryOperator 0x7fa5011dad78 <line:10:5, col:20> 'int' '=' | |-ArraySubscriptExpr 0x7fa5011dacc8 <col:5, col:12> '__global int' lvalue | | |-ImplicitCastExpr 0x7fa5011dacb0 <col:5> '__global int *' <LValueToRValue> | | | `-DeclRefExpr 0x7fa5011dac40 <col:5> '__global int *' lvalue ParmVar 0x7fa5011da238 'ptr' '__global int *' | | `-UnaryOperator 0x7fa5011dac90 <col:9, col:11> 'int' prefix '++' | | `-DeclRefExpr 0x7fa5011dac68 <col:11> 'int' lvalue Var 0x7fa5011daba8 'i' 'int' | `-BinaryOperator 0x7fa5011dad50 <col:16, col:20> 'int' '+' | |-ImplicitCastExpr 0x7fa5011dad38 <col:16> 'int' <LValueToRValue> | | `-DeclRefExpr 0x7fa5011dacf0 <col:16> 'int' lvalue Var 0x7fa5011daaf8 'x' 'int' | `-IntegerLiteral 0x7fa5011dad18 <col:20> 'int' 45 是不可行的。实际的问题是我不太了解嵌套表达式的所有不同嵌套形式。有工具或方法吗?

0 个答案:

没有答案