当程序在断点处停止时, 控制权就转交给了调试器. 开发者可以通过给调试器下发指令控制程序继续按步/继续/退出执行.
跳入(Stepping In), 跳出(Stepping Out), 下一步(Step Over)
使用thread step-over(next或者n)
命令让程序执行当前行, 跳到下一个程序行.
如果调试器在函数调用处停止, 使用thread step-in(step或者s)
, 跳入函数内部. 如果调试器没有在函数调用处停止, 使用thread step-in
的效果和thread step-over
是一样的.
使用thread step-out
跳出函数, 这个命令的效果和thread step-in
的效果相反. 通过继续程序执行, 直至下一个函数return或者栈帧弹出, 来达到跳出当前函数的目的.
(lldb) thread step-over
Process 97209 stopped
* thread #1: tid = 0x1288be3, 0x00000001000019bd Greeter`main + 109 at Greeter.swift:20, queue = 'com.apple.main-thread', stop reason = step over
frame #0: 0x00000001000019bd Greeter`main + 109 at Greeter.swift:20
17
18 let greeter = Greeter()
19
-> 20 greeter.greet(personNamed: "Anton")
21 greeter.greet(personNamed: "Mei")
22 greeter.greet(personNamed: "Anton")
(lldb) thread step-in
Process 97209 stopped
* thread #1: tid = 0x1288be3, 0x0000000100001bab Greeter`Greeter.greet(name="Anton", self=0x0000000100606b10) -> () + 27 at Greeter.swift:9, queue = 'com.apple.main-thread', stop reason = step in
frame #0: 0x0000000100001bab Greeter`Greeter.greet(name="Anton", self=0x0000000100606b10) -> () + 27 at Greeter.swift:9
6 }
7
8 func greet(personNamed name: String) {
-> 9 if hasMet(personNamed: name) {
10 print("Hello again, \(name)!")
11 } else {
12 acquaintances.insert(name)
(lldb) thread step-out
Process 97209 stopped
* thread #1: tid = 0x1288be3, 0x00000001000019bd Greeter`main + 109 at Greeter.swift:20, queue = 'com.apple.main-thread', stop reason = step out
frame #0: 0x00000001000019bd Greeter`main + 109 at Greeter.swift:20
17
18 let greeter = Greeter()
19
-> 20 greeter.greet(personNamed: "Anton")
21 greeter.greet(personNamed: "Mei")
22 greeter.greet(personNamed: "Anton")
继续执行程序
在断点处调试结束后, 可以通过 process continue
来继续程序的执行.
Continuing Execution
Once you are finished inspecting the program at the current breakpoint, you can resume execution of the program using the process continue (continue or c) command.
(lldb) process continue
Resuming thread 0x12f1d19 in process 97209
Process 97209 resuming