컴파일을 위해 Clang에 소스 코드를 전달할 때 어떤 순서로 어떤 LLVM/Clang 코드가 실행됩니까?Clang Launch Sequence?
답변
정확히 무엇을 의미합니까? 컴파일 단계에 관심이 있습니까? 아니면 특정 메소드 나 클래스에 대한 스택 추적을 보시겠습니까?
컴파일 단계 :
이의이 터미널에 clang main.c
을 입력하여 clang
일부 소스 파일을 통과한다고 가정 해 봅시다.
자체에 의한 clang
명령은 매개 변수를 소비하고 실제 컴파일러를 호출 단지 드라이버 (직접 clang
-cc1
인수를 전달하여 호출 할 수 있습니다). 모든 매크로 정의를 처리하는 전처리 (#define
, #ifdef
등)
if
키워드, while
를 호출
- :
그런 다음, 컴파일러 자체는 다음과 같은 작업을 수행 키워드,
your_var
식별자 등) - Abstract Syntax Tree을 구성하고 의미 분석을 적용하는 구문 분석기에 토큰을 전달하지만 만 (예 : 대입 표현식에 lvalue 및 rvalue에 대한 올바른 유형이 있는지 확인)
- AST가 완료되면 'CodeGen'단계가 실행됩니다. 파서가 전달한 AST를 으로 변환합니다. 여기
- 는 프론트 엔드 상 단부 LLVM 최종적 표시 : 그것은 LLVM IR 소요 최적화를 적용하고 어셈블리 코드를 발생 시키거나 최종 사용자 플랫폼 파일 오브젝트 (예 : x86_64에, arm64)
을 스택 추적 :
스택 추적 또는 디버깅 보고서를보고 싶다면 직접 Clang을 작성하는 것이 좋습니다.
첫째, 다운로드 LLVM의 소스 파일 :
mkdir ~/Projects/clang-dev
cd ~/Projects/clang-dev
git clone http://llvm.org/git/llvm.git
git clone http://llvm.org/git/clang.git llvm/tools/clang
git clone http://llvm.org/git/clang-tools-extra.git llvm/tools/clang/tools/extra
git clone http://llvm.org/git/compiler-rt.git llvm/projects/compiler-rt
당신이 할 수있는
여기 힘내 통해 하드 드라이브에 LLVM 저장소를 복제 한 후 엑스 코드를 사용하여 OS의 X에 LLVM/연타를 컴파일하기위한 지침입니다 또한 각 복제 명령에 분기 이름을 전달하여 정확한 버전을 지정하십시오.: git clone http://llvm.org/git/llvm.git -b release_34
다음, 생성하고 열 엑스 코드 프로젝트 : 소스 파일을
cd ~/Projects/clang-dev
mkdir build
cd build
cmake -G Xcode CMAKE_BUILD_TYPE="Debug" ../llvm
open LLVM.xcodeproj
프로젝트의 현재 목표/계획 등 clang
설정을 클릭하여 '편집 방식을'을 추가 연타로 전달되는 인자로는 실행될 때 :
꽤 많이있어 그; 중단 점 (main
방법 또는 원할 때마다)을 설정하고 Run
버튼을 누르거나 Cmd + R을 누릅니다. 이 괞 찮아 인 경우
Architecture of Open-Source Applications: LLVM by Chris Lattner
: Getting started with LLVM/Clang on OS X
유용한 링크 :
UPD는 여기
더 자세한 가이드 tform 및/또는 IDE 종속적 인 경우에는 OS X 10.10 Yosemite 및 Xcode 6.1.1의 컨텍스트에서이 질문을하고 있습니다. – RandomDSdevel