비슷하지만 다른 헷갈리는 용어 정리








(lldb) command [subcommand] -option "this is argument"
예시: (lldb) breakpoint set --file test.c --line 12
argument는 공백이 포함되는 경우가 있어 ""로 묶어줄 수 있다
# 커맨드
(lldb) help breakpoint
# 서브커맨드
(lldb) help breakpoint set
(lldb) apropos "reference count"
[ 결과 ]
# The following commands may relate to 'reference count':
# refcount -- Inspect the reference count data for a Swift object
(lldb) po someVariable
(lldb) p someVariable + 1
Breakpoint
(lldb) breakpoint --name viewDidLoad
(lldb) br s -r '^hello`
(lldb) rb '^hello`
(lldb) breakpoint set --func-regex '^hello`
(lldb) br -n viewDidLoad
(lldb) br s --file ViewController.swift --line 20
(lldb) br s -f ViewController.swift --l 20
(lldb) breakpoint set --name "viewWillAppear" --condition animated
(lldb) br s -n "viewWillAppear" -c animated
animated가 true인 경우에만 break
(lldb) breakpoint set -n "viewDidLoad" --command "po $arg1" -G1
(lldb) br s -n "viewDidLoad" -C "po $arg1" -G1
"po $arg1" : 현재 함수의 1st Argument의 인스턴스 값 확인
G1 : 자동 continue
shorthand breakpoint
(lldb) b viewDidLoad
(lldb) b 20
(lldb) b ViewController.swift:20
(lldb) b /stop here/
(lldb) b 0x12345678
Breakpoint 리스트 확인하기
(lldb) breakpoint list
(lldb) br list
(lldb) br list -b
(lldb) br list <id>
breakpoint 삭제/비활성화 하기
(lldb) breakpoint delete
(lldb) br de
(lldb) br de <id>
(lldb) breakpoint disable
(lldb) br di
(lldb) br di <id>
Stepping
(lldb) step
(lldb) next
(lldb) finish
Expression
(lldb) po <인스턴스명>
(lldb) expression -O --<인스턴스명>
변수 값 읽기 & 변경하기
(lldb) expression <인스턴스명>
(lldb) e <인스턴스명>
(lldb) expression $R0!.backgroundColor = UIColor.blue
(lldb) continue
변수이름에 $를 붙혀줘야 한다
(lldb) expr var $view = UIView(frame: CGRect(x: 100, y:100, width: 80, height: 80))
(lldb) expression
# Enter expressions, then terminate with an empty line to evaluate:
1 $view.backgroundColor = UIColor.blue
2 self.view.addSubview($view)
expression 중 만나는 breakpoint는 무시하기
(lldb) expression --ignore-breakpoints true --
(lldb) e -i 1 --
(lldb) expression --ignore-breakpoints false --
(lldb) e -i 0 --
주소값과 타입만으로 변수에 접근
이를 위해 필요한 구체적인 동작은, 해당 주소에 있는 값을 적절한 타입으로 캐스팅하는 것이다
이건 바로 가능한 부분은 아니고 UIKit 모듈의 unsafeBitCast( _, to: ) 함수를 활용해야 한다
(lldb) expr -l Swift -- import UIKit
(lldb) expr -l Swift -- var $<변수명> = unsafeBitCast(<주소값>, to: <타입명>.self)
(lldb) expr -l Swift -- var $myLabel = unsafeBitCast(0x7fdf7611, to: UILabel.self)