ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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.llvm.org/use/map.html

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

    '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
Designed by Tistory.