2016-10-05 12 views
0

지난 5 년 동안 나는 gnu 컴파일러 모음 (gcc/g ++)을 사용하여 clang의 초보자였으며 C/Objective C/C++ 소스 코드에 대한 제어 흐름 그래프를 생성하고 싶습니다. 는 고맙게도 내가 here 읽고 here와 나는 CFG 클래스 함수를 사용하여 소스 레벨 문장의 기본 블록 표현을 얻을 수 있습니다 발견했다 : 대단한 CFG :: buildCFG() CFG :: 덤프()Clang을 사용하여 제어 흐름 그래프를 소스 코드에서 추출하는 방법은 무엇입니까?

:),하지만 은 여전히 ​​불분명하다 나를 위해 함수의 몸체를 AST 형식으로 가져오고 ASTContext를 buildCFG에 전달하기 전에 어떻게해야합니까 ??

주어진 소스 코드에 대해 CFG를 사용하여 내보내는 방법을 보여주는 짧은 코드 조각을 제공 할 수 있습니까?

당신에게 감사 나는 당신이 위에서 언급 한 것과 다른 방법을 사용하여 기가 사용될 수를 생성 할 수 있었다 모든

+0

에 의해 내가 도움이되었다는 것을 추가 할 ... 다시는 아마 정말 큰 얻을 것이다 또는 다른 사람을 추가해야합니다 도움/도움말, 감사합니다. – JammingThebBits

답변

1

. 그것은 당신이 필요로하는 것을 할 수 있습니다. 지원/GraphWriter.cpp의 ExecGraphViewer() 함수에서

sys::fs::remove(Filename);

과 그 소리를 다시 : 다음 줄 (임시로) 주석. 당신이 그것을 만든 .DOT 파일을 모두 삭제합니다 완료되면

clang -cc1 -analyze -analyze-checker=debug.ViewCFG src_code.cpp 

는 일반적으로이 명령은 다음에 CFG를 볼 수있는 그래픽 뷰어를 엽니 다 :

그런 다음, 그 소리 정적 분석 도구를 실행 볼 수 있습니다. 그러나이 라인을 주석 처리하면 뷰어를 닫은 후에도이 파일을 다른 곳에 복사 할 수 있습니다.

것은

는 또한 누군가가 친절하게 좀 줄 수 있다면 그것은 크게 감사 것 Adam