LLDB (Low-Level Debugger)

J.Noma·2021년 11월 15일
0

iOS : LLDB

목록 보기
1/1

🐼 과거 정리 내용 요약

기본 개념과 breakpoint / expression / image여기를 참고

✔️ breakpoint

특정 코드위치에서 멈추는 기능.

  • 함수에 걸기 (특정함수 / 정규식을 따르는 모든 함수)

  • 특정파일의 특정라인에 걸기

  • breakpoint에 조건걸기

  • break가 걸리면 특정 커맨드 실행하기

  • 기타 : breakpoint 리스트 확인하기 / 삭제 / 비활성화

✔️ Expression

인스턴스의 현재 값을 읽거나 변경할 수 있다

LLDB용 변수를 할당하고 함수를 실행하는 등의 행위도 가능

  • 인스턴스 읽기 (po)

  • 인스턴스 값 변경하기

  • LLDB용 변수 할당하기

  • 메모리주소로 변수 접근하기

✔️ Image

현재 process에 load된 module/symbol 정보를 출력.

  • 현재 process에 올려진 모든 module보기

  • 특정 module 검색

  • 특정 symbol 검색

  • Crash log 분석하기

✔️ 기타

  • LLDB 커맨드 alias

🐻 po / p / v

출처

✔️ po (print object description)

해당 객체의 정보 / 코드실행결과를 string으로 출력해준다.

코드 컴파일 과정이 있어 코드를 '실행'하는 것도 가능합니다

expression --object-description의 shorthand.

✔️ p (print)

해당 객체의 정보를 출력해주고, 객체의 참조를 레지스터로 불러옵니다

코드 컴파일 과정이 있어 코드를 '실행'하는 것도 가능합니다

expression --raw의 shorthand

po와 다른 점은, 다른 객체의 참조를 프로퍼티로 갖고 있으면
그 객체에 대한 정보도 참조를 따라가서 죄다 띄워줍니다

✔️ v (frame variable)

po처럼 참조를 레지스터로 가져오지 않고, 결과 출력만 해줍니다.

다만, 참조가 있으면 타고 들어가서 전부 보여준다는 점은 p와 유사합니다

frame variable의 shorthand

위의 두 커맨드와 달리, v에는 컴파일을 하지 않아서
뭔가 계산하거나 Swift구문이 끼어들 수 없고 인스턴스 값을 바로 읽는 것만 가능합니다

대신, display관련 옵션이 많다고 합니다
(특정 이름으로 시작하는 모든 변수 프린트하기 등)


🐵 watch : 특정 변수 값 모니터링하기

1. 변수 이름으로 등록

(lldb) watchpoint set variable <변수명>

2. 메모리 주소로 등록

(lldb) watchpoint set expression -- <메모리주소>

3. (제일쉬움) GUI로 등록

🐸 ErrorThrow/Exception에 break걸기

출처

(lldb) break set -E swift로 걸어주면 된다

(유용할듯?)

위 커맨드로 break를 걸고 Error throw를 하면 아래와 같이 나온다


🐰 오토레이아웃 debugging

✔️ View 계층 보기

✔️ View 속성 바꾸기

뷰컨의 view 프로퍼티를 따라 타고 들어간다
(다른 좋은 방법이 있을지도)

예시 : 특정view의 배경색바꾸기
-> 뷰컨에서 breakpoint
-> p self.view.subviews로 레지스터 확보 및 subview의 몇 번째 요소인지 확인
-> e $R1[0].backgroundColor = UIColor.systemPink


🐮 메모리 그래프 보기

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글