5
我想通過做一點動態代碼工具與C(也許C++),我採取源文件並生成一個儀器化的輸出來使用Clang的速度。我想在任何塊的開頭添加一個函數調用,並且更改所有布爾表達式來調用某個函數,以便我也可以跟蹤它。例如:動態儀器與叮鐺
foo = a && (b || c);
將成爲類似:
foo = EXPR_AND(a, EXPR_OR(b, c));
,因此我可以跟蹤發生的條件的所有組合。
我假設使用RecursiveASTVisitor是最好的方法,但是有沒有簡單的方法來輸出我訪問的每個節點的C代碼?
任何有關如何完成此類任務的建議都將非常感謝!
注意:經過一些進一步調查,我剛剛發現libclang,看起來它可能是我最好的朋友。加上一個重寫器,我可能只是有我需要的東西。任何指向良好示例的指針(我只是找到了優秀的Apple開發人員在libclang上會見視頻)會很棒。
你提出的改造極大地改變了代碼的語義如果'B'或'C'包含任何副作用...... –
其實,EXPR_AND和EXPR_OR是看起來像宏展開: 的#define EXPR_AND(A,B )(a?instr [0] = 1:instr [1] = 1,0)&&(b?instr [2] = 0:instr [3] = 1,0) –