LLDB

LLDB - 명령어 (2)

GREEN.1229 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.llvm.org/use/map.html

https://yagom.net/courses/start-lldb/