나는 소스 파일을 가져 와서 인스트루멘털 된 출력을 생성하는 C (그리고 어쩌면 C++)로 약간의 동적 코드 계측을 수행함으로써 Clang을 사용하여 속도를 높이려고합니다. 모든 블록의 시작 부분에 함수 호출을 추가하고 모든 부울 식을 변경하여 일부 함수를 호출하여 추적 할 수도 있습니다. 예를 들어 :Dynamic Instrumentation with Clang
foo = a && (b || c);
는 같은 될 것입니다 :
foo = EXPR_AND(a, EXPR_OR(b, c));
을 따라서 나는 발생 조건의 모든 조합을 추적 할 수 있습니다.
나는 최선의 접근 방식이 될 것이라고 RecursiveASTVisitor를 사용한다고 가정하지만 방문하는 각 노드마다 C 코드를 출력하는 쉬운 방법이 있습니까?
이와 같은 것을 달성하기 위해 무엇을보아야하는지에 대한 제안이 가장 만족 스러울 것입니다!
참고 : 추가 조사를 마친 후 가장 친한 친구 인 것처럼 보이는 libclang을 발견했습니다. 다시 쓰는 사람과 함께, 나는 내가 필요한 것을 가지고 있을지도 모른다. 좋은 예를 가리키는 포인터 (방금 libclang에서 비디오를 만나는 훌륭한 애플 개발자를 찾았습니다)가 좋을 것입니다.
'b' 또는'c'가 부작용을 포함하면 제안 된 변형은 코드의 의미를 크게 변경합니다 ... –
실제로 EXPR_AND 및 EXPR_OR은 다음과 같은 매크로 확장입니다. #define EXPR_AND (a, b) (instr [0] = 1 : instr [1] = 1,0) && (b? instr [2] = 0 : instr [3] = 1,0) –