-
LLDB - 명령어 (3)LLDB 2021. 4. 19. 17:08
안녕하세요. 그린입니다🟢
오늘 포스팅에서는 LLDB에서 브레이크포인트 되어 멈춰있을때 새 동작을 실행시키는 명령어와 기능에 대해 알아보고 학습하겠습니다🧑🏻💻
오늘 알아볼 기능은 Expression입니다. 말그대로 해석하자면 표현이란 의미입니다. 그럼 우리는 LLDB에서 어떤걸 표현해볼 수 있을까요?
객체 상태에 대한 표현? 뷰의 표현? 이제 알아가보도록 하겠습니다☺️
Expression?
- breakpoints 걸려있을때 새로운 동작을 실행시키는 기능
- expression = expr = e
po?
- 객체의 정보를 확인할 수 있는 기능으로 LLDB를 접하고 가장 많이 쓰고 있는 기초적인 명령어
- (lldb) expression -O -- (객체)의 함축 표현
- O는 Object 즉 객체의 상세 정보 출력을 의미
- iOS에서는 Swift와 Object-C의 두 프로그래밍 언어로 표현된것이 존재하는데 LLDB에서 만약 Object-C 코드에서 멈춘 후 po 테스트를 Swift로 하게되면 에러가 나며 반대의 경우도 에러를 내뱉는다. 그래서 해당 언어 코드로 변환하여 실행을 위해 강제로 -l (language) 옵션을 사용할 수 있다. (lldb) expression -l objc/swift -O -- "표현"
"정리해보자면 po는 현재 객체정보 출력에 대한 요약을 나타내고 e(expression)은 더 다양한 동작을 해주는 기능!!"
변수 사용
- 런타임 시 LLDB를 통해 변수 값을 보는것에 더해 값을 변경하면서 테스트할 수 있음
- 변수를 LLDB는 값 출력시 $R의 형태로 생성 및 저장함 (breakpoint 벗어나도 사용 및 수정이 가능)
1. 뷰가 어느 변수에 저장되어 있는지 정보 확인 ($R10)
2. 뷰의 배경색 변경
3. 진행 시 시뮬레이터에 배경색 변경된것 확인
- po 명령어로도 진행이 가능 (다만 변수값은 나오지 않아 expression으로 확인해야함)
변수 선언
- 사용하려는 변수명 앞 $ 문자를 붙여 직접 선언 가능
1. 뷰 인스턴스를 새로 생성하여 크기 지정
2. 생성된 뷰를 서브뷰로 추가
3. expression 명령어 뒤 리턴키(엔터) 입력 시 Multi-Line-Expression 입력 가능 (공백에서 리턴키 입력 시 완료)
BreakPoint 무시하기
- --ignore-breakpoint(-i) 옵션 사용
- true는 무시하고 진행 false는 무시하지 않기 (1과 0)
- 디폴트값은 true
객체의 주소값/타입으로 정보 얻기
- unsafeBitCast(to:) 함수 이용
1. UIKit import: LLDB 콘솔에서 UIKit에 포함된 요소 타입의 이용을 위함
2. unsafeBitCast(to:)를 이용하여 주소값의 객체를 변수에 할당
3. 변수를 통해 정보 얻기
[느낀점]
LLDB를 이제 조금 활용할 수 있을것 같은? 느낌이 들었다. 그전에는 해당 기초 설정에 불과했다면 이제부터 학습한 명령어를 통해 디버깅중에 새로 변수나 함수를 만들어 뷰에 그려볼 수도 있고 여러 변수와 객체의 정보를 얻어 값을 변경해가며 테스트를 해볼 수 있게 되었다.
ignore하는 부분에서 true와 false의 동작이 확실히 전부 이해는 되지 않지만..!? 그래도 어떠한가..! 천천히 지금처럼 한발짝씩 학습하면 언젠가 디버깅 스킬이 늘것임을 확신한다😁
[참고자료]
https://yagom.net/courses/start-lldb/
minsone.github.io/ios/mac/xcode-lldb-debugging-with-xcode-and-lldb
'LLDB' 카테고리의 다른 글
LLDB (5) - 오픈소스 스크립트 (Derek Selander) (0) 2021.04.21 LLDB - 명령어 (4) (0) 2021.04.20 LLDB - 명령어 (2) (0) 2021.04.17 LLDB - 명령어 (1) (0) 2021.04.16 LLDB - 개념 및 소개 (0) 2021.04.16