コードを変更するclangプラグインの書き方について問題がありました。次のように、プログラムにコードを挿入したい: ここにコードを入力
//the original code
//the filename is user_code.cpp
int f1(){
return 1;
}
int f2(){
return 2;
}
int f3(){
return 3;
}
int main(){
for(int i=0;i<1000;i++)f1();
for(int i=0;i<10000;i++)f2();
for(int i=0;i<100000;i++)f3();
return 0;
}
//the injected code
int function_counter[3];
int f1(){
function_counter[0]++;
return 1;
}
int f2(){
function_counter[1]++;
return 2;
}
int f3(){
function_counter[2]++;
return 3;
}
int main(){
for(int i=0;i<1000;i++)f1();
for(int i=0;i<10000;i++)f2();
for(int i=0;i<100000;i++)f3();
return 0;
}
今、私はこのコードを AST に解析することでこれを行うことができます。それをトラバースし、ReWriter クラスを使用してコードを変更し、最後に変更されたコードを新しいファイルに書き直します。しかし、これはユーザーには透過的ではありません。clang を書きたいですプラグイン、ユーザーはコマンドを入力するだけです:
clang -load myplugin.so -plugin myplugin user_code.cpp -o user_code.o
コードは最初に透過的に注入でき、次に通常のようにコンパイルできます。何ができますか?何か提案はありますか?