-
LLDB - 명령어 (1)LLDB 2021. 4. 16. 17:27
안녕하세요. 그린입니다🟢
이번 포스팅에서는 LLDB의 기본 문법 구조와 가장 기초적인 명령어에 대해 학습하겠습니다📝
LLDB의 문법 구조
: (lldb) command [subcommand] -option “Argument”
- command & subcommand: lldb 안에서의 오브젝트 이름 (브레이크포인트, 셋, 리스트 등)
-> 계층화 및 커맨드에 따라 서브커맨드 종류가 다름
- option: 커맨드 뒤 어느곳이든 위치가 가능함
- Argument: 인자에 공백이 포함되어있을때도 있어 주로 문자열처럼 묶어서 표현해줌 (꼭 문자열처럼 묶어서 표현해야되는것은 아님)
- 명령어와 옵션들은 앞 1~2개 철자로 함축하여 사용 가능
ex) (lldb) breakpoint set --file ViewController.swift --line 6
-> 파일 옵션과 라인 옵션을 주어 브레이크 포인트를 설정해준것!
이제 본격적으로 다양한 LLDB 명령어의 세계로!!🌏
Help
: LLDB에서 제공하는 커맨드 명령어에 대한 나열 및 설명
Apropos
: 검색 기능과 같이 관련 키워드를 검색하여 원하는 명령어를 찾는 명령어
-> 정상적으로 나올때
-> 없는 값 검색 시
Breakpoint
: 문제 발생되는 지점을 탐색해 멈춘후 조건변경을 하며 테스트를 하기 위한 명령어
: 브레이크 포인트 잡힌 부분에서 녹색 햄버거 버튼을 이동시켜 실행 지점을 변경할 수 있음(lldb) breakpoint set [option] “Arg”
-> (lldb) br s [option] “Arg”
- 함수 탐색
: (lldb) breakpoint set —name 함수명
: (lldb) br s -n 함수명
: (lldb) b -n viewDidLoad
: (lldb) b viewDidLoad
-> 정규표현식 활용 가능 (--func-regex (-r) option)
: (lldb) breakpoint set —func-regex 정규표현식
: (lldb) br s -r ‘^hello’
: b -r ‘^hello’
: (lldb) rb ‘^hello’ (breakpoint set —func-regex를 rb로 줄이기 가능) - 파일 탐색
: —file(-f)과 —line(-l)으로 탐색
3. 상태 탐색
: —condition(-c) 옵션을 통해 해당 조건이 참일때만 멈추게함
-> text가 그린이면 10번째 라인에서 멈추는 브레이크포인트를 주고 실행하는 코드
4. Command
: 브레이크 시 —command(-C) 옵션을 통해 원하는 커맨드 실행 가능
5. AutoContinue
: -G1 옵션을 통해 커맨드 실행 후 브레이크 탈출해서 프로그램 자동 진행하게 해줌6. List
: breakpoint list (br l)로 현재 브레이크포인트 잡힌 리스트를 보여줌
: id / 이름 / hit-count / enable 상태 / source 상태 / 위치, 주소값 정보 포함됨
: hit-count는 해당 지점에서 브레이크포인트가 발동되면 1씩 늘려감 (참조횟수 느낌)-> list -b: 리스트 간단 출력
-> list -b 숫자: 해당 아이디만 출력
7. Delete
:breakpoint delete 번호 (br del 번호)로 브레이크포인트 삭제8. Enable / Disable
:breakpoint disable / enable 번호 (br dis/en 번호)로 브레이크포인트 활성/비활성화[의문점 및 느낀점]
1. 먼저 의문이 들었던 부분은 breakpoint와 같이 명령어들을 br과 같이 축약을 했을때는 뒤의 서브 커맨드 set을 붙여줘야했는데 왜 b로 축약이 되면 set을 붙이지 않아도 되는걸까? 이에 대해 알아봤을때 br은 breakpoint의 함축형이고 b는 shorthand-command로 breakpoint set의 기능을 b로 축약한것이다. 즉 b는 브레이크포인트를 생성하는 명령어라고 볼 수 있다.
2. 브레이크포인트를 잡아줬을때 디버깅 콘솔창에 나오는 예를들어 "152 locations"의 의미를 몰랐는데 이후 breakpoint list로 확인해보았을때 해당 브레이크포인트를 viewDidLoad로 잡았다면 152번의 해당 함수를 호출하는곳이 있다는 의미이다.
3. 1번 의문점과 마찬가지로 b를 사용 함축해서 사용할때는 LLDB 명령어의 자동완성을 지원하지 않는것 같았다. 이는 아직 확실한 정보를 찾지 못했지만 추측하자면 함축을하게되면 다른 의미가 될 수 있어 자동완성을 지원하지 않는것 같다.
이렇게 이번에는 LLDB의 기본 문법구조와 3가지 명령어를 학습해보았다. 그중 breakpoint에 대해 조금 더 심도있게 파악해보았던점에서 머리가 아팠지만 그래도 한걸음 더 나아간것 같아 좋다. 다음에는 프로세스를 단계별로 진행하면서 상태를 보는 명령어에 대해 학습해보겠다😁
[참고자료]
https://lldb.llvm.org/use/map.html
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 - 명령어 (3) (2) 2021.04.19 LLDB - 명령어 (2) (0) 2021.04.17 LLDB - 개념 및 소개 (0) 2021.04.16 - 함수 탐색