Я пытаюсь освоиться с использованием Clang, выполнив немного инструментария динамического кода с C (и, возможно, C ++), где я беру исходный файл и генерирую инструментальный вывод.Я хотел бы добавить вызов функции в начале любого блока, а также изменить все логические выражения для вызова некоторой функции, чтобы я тоже мог отслеживать это.Например:
foo = a && (b || c);
будет выглядеть примерно так:
foo = EXPR_AND(a, EXPR_OR(b, c));
, и, таким образом, я могу отслеживать все комбинации возникающих условий.
Я предполагаю, что использование RecursiveASTVisitor будетбыть лучшим подходом, но есть ли простой способ вывести код C для каждого узла, который я посещаю?
Любые предложения о том, на что обратить внимание, чтобы достичь чего-то подобного, будут наиболее цениться!
Примечание: после некоторых дальнейших исследований я обнаружил libclang, который, похоже, мог бы стать моим лучшим другом.В сочетании с переписчиком, я мог бы просто иметь то, что мне нужно.Любые указатели на хорошие примеры (я только что нашел отличные видео для разработчиков Apple, встречающихся на libclang) были бы хороши.