-
LLDB - 명령어 (2)LLDB 2021. 4. 17. 11:25
안녕하세요. 그린입니다🟢
오늘 포스팅에서는 LLDB에서 상태 변화를 줄 수 있는 명령어와 기능에 대해 알아보고 학습하겠습니다🧑🏻💻
오늘 알아볼 기능은 Stepping인데요, 스테핑 말 그대로 발걸음 같은 의미로 LLDB에서 프로세스 진행 상태를
단계별로 나아가면서 상태 변화를 볼 수 있는 기능입니다.
Stepping에는 3가지의 기능이 담겨있는데 Step Over / Step In / Step Out입니다.
그럼 이제 자세히 3가지의 기능과 어떤 명령어를 사용하며 무슨 차이가 있는지 알아보겠습니다😃
Step Over
: 브레이크포인트가 걸려있던 상태에서 다음 코드로 넘어가는 기능으로 축구에서는 헛다리 짚기 동작인데 어떻게 보면 헛다리를 짚는 동작 자체가 지금 현재 위치보다 발을 한단계 더 나아가서 짚는것이니까 그런식으로 생각하면 편하겠네요!!
: (lldb) next = (lldb) n = (lldb) thread step-over 이라는 명령어를 통해 사용
Step In
: 다음 구문이 메서드 호출을 하는 경우에 디버거 포인트를 해당 메서드 내부의 시작 지점으로 이동시키는 기능
-> 잡힌 구문이 함수 호출을 하는 구문이여야됩니다. (그래야 다음 해당 함수 시작 지점으로 이동!)
: (lldb) step = (lldb) s = (lldb) thread step-in 이라는 명령어를 통해 사용
"만약 내부에서 함수 호출이 없다면 스텝오버와 스텝인은 동일한 기능을 하겠죠?"
Step Out
: 현재 위치한 함수가 종료될때까지 프로세스를 진행하고 종료되면 브레이크포인트를 생성해줘서 멈추는 기능
: 메모리적 측면에서 본다면 프레임을 스택에 쌓고 하는 과정에서 Pop하는 기능과 동일
: (lldb) finish = (lldb) thread step-out 이라는 명령어를 통해 사용 (스텝오버/스텝인과 다르게 함축 표현이 없음!)
디버거 콘솔창에서 위의 아이콘도 현재 설명한 Step Over / Step In / Step Out과 동일한 기능을함 (순서대로 나열)
추가로, Run과 Continue도 많이 사용함으로 알아보겠습니다😀
Run
: 현재 프로세스를 끝내고 다시 새로 빌드하여 런 시키는 명령어
: (lldb) run = (lldb) r = (lldb) process launch
Continue
: 다음 브레이크포인트 지점까지 멈추지 않고 프로세스를 쭉 진행 시키는 명령어
: (lldb) continue = (lldb) c
[느낀점]
StepOver와 StepIn을 통해 디버깅뿐만 아니라 뷰의 호출 순서와 어떻게 화면에 그려지고 함수들의 호출과 반환 순서 로직에 대해 이해할 수 있게 되었다.
스테핑을 사용하면 순차적으로 흐름을 볼 수 있기에 좋은 기능이라고 생각이 들었다.
런타임 시 뷰가 전부 보여지는 상태로 에러를 찾기 힘들었는데 어느 시점에서 어디가 문제가 발생하는지 명확히 찾을 수 있을것 같다.
또 실습해보면서 스토리보드로 텍스트를 받는 레이블을 구성하고 viewDidLoad 함수에서 문자열을 하나 정의하고 바인딩 시킨다음 LLDB의
스텝오버 명령어로 흐름을 보았는데 Label.text = "GREEN" 처럼 바로 주어진 후 뷰에 그려지는게 아닌 viewDidLoad 함수가 종료되어야지 화면에 나오는것을 파악할 수 있었다. 이렇게 함수의 호출 시점과 종료 시점을 명확히 구분 할 수 있게 되었다.
또한 스레드에 스택이 쌓이고 팝되는 과정도 디버깅을 통해 볼 수 있었다.
[참고자료]
'LLDB' 카테고리의 다른 글
LLDB (5) - 오픈소스 스크립트 (Derek Selander) (0) 2021.04.21 LLDB - 명령어 (4) (0) 2021.04.20 LLDB - 명령어 (3) (2) 2021.04.19 LLDB - 명령어 (1) (0) 2021.04.16 LLDB - 개념 및 소개 (0) 2021.04.16