2014-12-04 5 views

답변

2

정확히 무엇을 의미합니까? 컴파일 단계에 관심이 있습니까? 아니면 특정 메소드 나 클래스에 대한 스택 추적을 보시겠습니까?


컴파일 단계 :

이의이 터미널에 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 설정을 클릭하여 '편집 방식을'을 추가 연타로 전달되는 인자로는 실행될 때 :

    Edit scheme

    꽤 많이있어 그; 중단 점 (main 방법 또는 원할 때마다)을 설정하고 Run 버튼을 누르거나 Cmd + R을 누릅니다. 이 괞 찮아 인 경우

    Architecture of Open-Source Applications: LLVM by Chris Lattner

    objc.io: The Compiler by Chris Eidhof