Динамические инструменты с Clang - PullRequest
5 голосов
/ 20 января 2012

Я пытаюсь освоиться с использованием Clang, выполнив немного инструментария динамического кода с C (и, возможно, C ++), где я беру исходный файл и генерирую инструментальный вывод.Я хотел бы добавить вызов функции в начале любого блока, а также изменить все логические выражения для вызова некоторой функции, чтобы я тоже мог отслеживать это.Например:

foo = a && (b || c);

будет выглядеть примерно так:

foo = EXPR_AND(a, EXPR_OR(b, c));

, и, таким образом, я могу отслеживать все комбинации возникающих условий.

Я предполагаю, что использование RecursiveASTVisitor будетбыть лучшим подходом, но есть ли простой способ вывести код C для каждого узла, который я посещаю?

Любые предложения о том, на что обратить внимание, чтобы достичь чего-то подобного, будут наиболее цениться!

Примечание: после некоторых дальнейших исследований я обнаружил libclang, который, похоже, мог бы стать моим лучшим другом.В сочетании с переписчиком, я мог бы просто иметь то, что мне нужно.Любые указатели на хорошие примеры (я только что нашел отличные видео для разработчиков Apple, встречающихся на libclang) были бы хороши.

1 Ответ

2 голосов
/ 25 мая 2012

Хороший пример см. В этом проекте .

. Он использует clang для инструментария вызова функции входа и выхода, а также проверяет типы переданных аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...