Swift 代码调试核武-LLDB调试基础

原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow

profile for Leo on Stack Exchange, a network of free, community-driven Q&A sites


前言:LLDB是个开源的调试器,与XCode绑定的

LLDB的使用中,Swift与Objective C还是有一些差别的

本文主要侧重LLDB的常用命令


资料(目前状态XCode 7.2 Swift 2.1.1),非XCode 7.2+本文代码可能不能运行

对了,Swift到现在也不过一岁半,所以LLDB对于Swift的支持肯定不如OC那么好。


如何打开LLDB如何使用?

通常的方式就是断点,另外,关于利用XCode图形化调试,在我这篇文章里有详细讲解

本文适合XCode 7.2 +
不管是在程序中加断点

还是手动的暂停程序


让代码停在Swift Error 或者Objective C异常

停在Objective C异常

(lldb) br s -E  objc
Breakpoint 6: where = libobjc.A.dylib`objc_exception_throw, address = 0x000000010dededbb

停在Swift Error

(lldb) br s -E swift
Breakpoint 7: where = libswiftCore.dylib`swift_willThrow, address = 0x000000010e55ccc0

停在某一种类型的Swift Error

(lldb) br s -E swift -O EnumError
Breakpoint 8: where = libswiftCore.dylib`swift_willThrow, address = 0x000000010e55ccc0

以此作为开端,希望读者能耐心看完,本文很长


准备工作

为了方便,我们先写好这样的一个Model类,定义个ErrorType,并且定义个实例方法抛出异常

enum CustomError:ErrorType{
    case LeoError1
    case LeoError2
}
class Person:NSObject{
    var name:String
    var age:UInt32
    init(name:String,age:UInt32){
        self.name = name
        self.age = age
    }
    //重写description是为了方便调试
    override var description:String{
        return "name:\(name) age:\(age)"
    }
    func PersonException() throws{
        throw CustomError.LeoError1
    }
}

然后在viewDidLoad中初始化一个对象,并打一个断点

let person = Person(name: "Leo", age: 23)

打印命令 p/po

p

(lldb) p person
(SwiftLLDBDemo.Person) $R0 = 0x00007f99b8d30b40 {
  ObjectiveC.NSObject = {
    isa = SwiftLLDBDemo.Person
  }
  name = "Leo"
  age = 23
}

po

(lldb) po person
name:Leo age:23

p命令会打印出对象的类型,如果是Objective C对象,会打印出isa,以及属性的值
po 命令 对于继承自NSObject得对象,指示会打印出description中的内容

再举个例子

(lldb) po ["123","345"]
▿ 2 elements
  - [0] : "123"
  - [1] : "345"

(lldb) p ["123","345"]
([String]) $R2 = 2 values {
  [0] = "123"
  [1] = "345"
}

也可以,调用一段代码

(lldb) p for i in 1...3{ print(i) }
1
2
3

执行代码 e

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值