Xcode Compiler에 대해 간단하게만 알아보자. 실질적으로 공부하기에는 좀 어렵다 ㅠ
Xcode Compiler
애플의 macOS, iOS, watchOS, tvOS 개발 IDE
- 컴파일러
- 프론트엔드
- 어휘 및 구문 분석
- tokenizer, syntax
- Clang
- Swift Compiler
- 미들엔드
- 프로그램의 원래 의미를 유지하면서, 최적화 작업 진행
- c의 경우 obj 파일에 해당
- java의 경우 jvm위에서 도는 bytecode
- LLVM
- 이전에는 gcc
- Intermdediate Reperesntation 생성
- 백엔드
- 변경된 코드가 타겟 아키텍쳐에서 동작하는 코드로 변환
- LLVM
- 컴파일러의 경우 지원 언어와 지원 플랫폼에 따라 다양한 버전이 필요하거나, 무거워진다는 단점이 있다.
- 지원 언어로는 C, C++, Objective-C, Swift, AppleScript, Java, Python, Ruby 등이 있다.
LLDB
LLVM 프로젝트 일환으로 개발된 디버거
LLVM의 Clang 표현, parser, LLVM Deassembler 등을 활용하여 제작되었다. C, C++, Objective-C, Swift 등을 지원한다.
- Thread
- Frame
- 스레드에서 stack 별로 들어가는 단위
- 간단하게 말하면, 디버깅할 때 왼쪽에 스레드 별로 콜스택을 눌러서 확인할 수 있는데, 이 단위를 frame이라 함
- Disassemble
- 아키텍쳐에 맞게 변환된 코드를 그나마 읽을 수 있는 코드(어셈블리어)로 바꿔주는 녀석
- Backtrace
- 실행의 흐름에 따라 콜스택이나 로컬에 쌓이는데 이를 역추적할 수 있는 기능
- Expression
- LLDB 상에서 변수나 메모리 주소 확인을 위해 사용하는 표현식
- Break point
- Watch point
- 어떤 변수나 메모리가 변할 때 멈추게 해주는 것
Commands
- C
- n
- next
- 현재 프레임에서 소스 수준 한단계 진행 (우리가 작성한 코드 라인 의미)
- s
- step
- 현재 프레임에서 소스 수준 한단계 내부 진행
- finish
- ni
- 현재 프레임에서 명령어 수준 한단계 진행 (실제 바이러니 명령어 의미)
- si
- 현재 프레임에서 명령어 수준 한단계 내부 진행
Variables
- fr v
- fr: frame의 약자
- 현재 프레임의 매개 변수, 지역 변수 출력
- fr v -a (automatic)
- fr v [변수 이름]
- fr v -f x [변수 이름]
- fr variable -O self
- ta v
- ta v [변수 이름]
Thread
- thread list
- thread select [thread number]
- thread until [code line]
- thread jump -line [code line]
- thread jump -by +/- [code line]
- thread return [return value]
Disassemble
- di -f
- di -n
- di -f -m
- 현재 프레임의 코드에 해당하는 명령어를 코드와 함께 출력
- di -l
- 현재 프레임의 현재 소스 코드 라인을 디어셈블
Backtrace
- bt
- bt all
- bt [count]
- 현재 스레드의 stack trace를 개수만큼 출력
- up
- down
Expression
- e
- p
- expr [expression]
- po [object, variable]
- po [memory address]
Breakpoint
- b [function name]
- 해당 이름을 가진 모든 함수에 Breakpoint 설정 (swift)
- breakpoint set -name [class name]
- 해당 이름을 가진 모든 함수에 breakpoint 설정 (objective-c)
- b [line count]
- 현재 파일의 특정 라인에 breakpoint 설정
- breackpoint modify -c [condition]
- b l
ETC
- wa s v global_var
- wa s e -[memory address]
- script [python]
Visual Debugging
View Debugging
- View hierachy
- View Layout
- View Constraints
Memory Debugging
- 시각적인 메모리 체크
- 각 객체의 참조 관계 표시
- Referenbce cycle등의 확인이 편리하다.
Profiler
성능 개선, 최적화 위해 많이 사용
Memory Profiler
- 메모리 할당 확인 가능
- 메모리 누수 등의 메모리 문제 해결 편리
Timer Profiler
- 병목 발생 부분 확인 가능
- 함수별 수행시간 프로파일링
- 어떤 메소드에서 수행되었는지 추적 가능
ETC
- breakpoint에 이름, 조건, 무시 등을 걸 수 있다.
- breakpoint에서 왼쪽 클릭하면 접근 가능
Reference