打印变量

  1. 打印数字

    (lldb) p/d 16
    16
  2. 16 进制格式

    (lldb) p/x 16
    0x10
  3. 2 进制格式

    (lldb) p/t 16
    0b00000000000000000000000000010000
    (lldb) p/t (char)16
    0b00010000

声明变量

(lldb) e int $a = 2
(lldb) p $a * 19
38
(lldb) e NSArray *$array = @[ @"Saturday", @"Sunday", @"Monday" ]
(lldb) p [$array count]
2

流程控制

  1. continue
    continuec
  2. step over,执行一行代码
    nextn
  3. step into
    steps
  4. step out
    thread step-outfinish
  5. 从当前函数返回
    thread return

管理断点

  1. 查看所有断点

    (lldb) br list
    Current breakpoints:
    1: file = '/testStringIndex/testStringIndex/ViewController.m', line = 73, exact_match = 0, locations = 1, resolved = 1, hit count = 1 1.1: where = testStringIndex`-[ViewController configureSections] + 261 at ViewController.m:73, address = 0x000000010de75515, resolved, hit count = 1 2: file = '/testStringIndex/testStringIndex/ViewController.m', line = 31, exact_match = 0, locations = 1, resolved = 1, hit count = 1 2.1: where = testStringIndex`-[ViewController viewDidLoad] + 701 at ViewController.m:31, address = 0x000000010de74f3d, resolved, hit count = 1
  2. disable 断点

    (lldb) br disable 2.1
    1 breakpoints disabled.
  3. 删除断点

    (lldb) br delete 1.1
    0 breakpoints deleted; 1 breakpoint locations disabled.

打断点

  1. 指定文件指定行数打断点

    (lldb) br set  -f ViewController.m -l 76
    Breakpoint 2: where = testStringIndex`-[ViewController configureSections] + 451 at ViewController.m:77, address = 0x000000010eff15d3
    (lldb) b ViewController.m:79
    Breakpoint 3: where = testStringIndex`-[ViewController configureSections] + 526 at ViewController.m:79, address = 0x000000010eff161e
  2. 在符号(C语言函数)上打断点

    (lldb) b isEven
    Breakpoint 3: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x000000010a3f6d00
    (lldb) br s -F isEven
    Breakpoint 4: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x000000010a3f6d00
  3. 在 OC 函数上打断点

    (lldb) breakpoint set -F "-[NSArray objectAtIndex:]"
    
    Breakpoint 4: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010fbb7570
    Breakpoint 5: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010fbb7570
    (lldb) b -[NSArray objectAtIndex:] Breakpoint 6: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010fbb7570
    Breakpoint 7: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010fbb7570
    (lldb) breakpoint set -F "+[NSSet setWithObject:]" Breakpoint 8: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010fadd5d0
    Breakpoint 9: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010fadd5d0
    (lldb) b +[NSSet setWithObject:] Breakpoint 10: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010fadd5d0
    Breakpoint 11: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010fadd5d0

更新界面

Chisel 中有一个命令,叫做 caflush,来渲染。

(lldb) e (void)[$myView setBackgroundColor:[UIColor blueColor]]
(lldb) e (void)[CATransaction flush] //渲染

Chisel 的命令

  1. 非重写方法的符号断点

    (lldb) bmessage -[MyViewController viewDidAppear:]
    Setting a breakpoint at -[UIViewController viewDidAppear:] with condition (void*)object_getClass((id)$rdi) == 0x000000010e2f4d28
    Breakpoint 1: where = UIKit`-[UIViewController viewDidAppear:], address = 0x000000010e11533c

    MyViewController 并没有实现这个方法。

    (lldb) help bmessage
    For more information run 'help bmessage' Expects 'raw' input (see 'help
    raw-input'.)

    Syntax: bmessage
    Set a breakpoint for a selector on a class, even if the class itself doesn't
    override that selector. It walks the hierarchy until it finds a class that does
    implement the selector and sets a conditional breakpoint there.

    Arguments:
    ; Type: string; Expression to set a breakpoint on, e.g. "-[MyView
    setFrame:]", "+[MyView awesomeClassMethod]" or "-[0xabcd1234 setFrame:]"

  2. 打印内部变量

    (lldb) pinternals self
    (ViewController) $14 = {
    _allStrings = 0x000060800005cec0 @"15 elements"
    _tableView = 0x00007fd27901fe00
    _sectionsArray = nil
    _collation = nil
    }
  3. 打印继承关系

    (lldb) pclass self
    ViewController
    | UIViewController
    | | UIResponder
    | | | NSObject

其他

  1. 当前行数和源码

    (lldb) frame info
    frame #0: 0x000000010704e515 testStringIndex`-[ViewController configureSections](self=0x00007fb3c8006160, _cmd="configureSections") at ViewController.m:73
  2. 查看内存

    (lldb) x/4c $str
    0x7fd04a900040: monk

LLDB 和Chisel 使用例子的更多相关文章

  1. iOS开发——测试篇&breakpoints、lldb 和 chisel 的详解

    breakpoints.lldb 和 chisel 的详解 Breakpoints BreakPoint分类 breakpoint也是有分类的,我这里的文章内大致按使用的方式分为了 Normal Br ...

  2. breakpoints、lldb 和 chisel 的使用

    http://www.cocoachina.com/ios/20150803/12805.html Breakpoints BreakPoint分类 breakpoint也是有分类的,我这里的文章内大 ...

  3. (转)Xcode调试技巧

    转自http://www.apkbus.com/android-140340-1-1.html 这篇文章给大家带来的是一些Xcode实用技巧,比如: • 摆脱NSlog打印输出,使用断点日志. • 摆 ...

  4. 关于Xcode调试的帖子,感觉不错,转来看看

    http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 http://www.raywenderlich.com/10505 ...

  5. 调试工具Chisel-LLDB插件

    Chisel-LLDB命令插件 相信每个人或多或少都在用LLDB来调试,比如po一个对象.LLDB的是非常强大的,且有内建的,完整的 Python 支持.今天我们主要介绍一个 facebook 开源的 ...

  6. Chisel-LLDB命令插件,让调试更Easy

    http://blog.cnbluebox.com/blog/2015/03/05/chisel/ LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...

  7. 说说XcodeLLDB调试的那些事儿

    使用场景之一,接收他人的项目,快速理清其层次结构,可以打标识符断点,如下图 每一个VC,都加了个在viewDidLoad方法处的断点,这样运行程序时,逐步断点,便可以理清层次, 但是,需要手动不断的继 ...

  8. breakpoints && lldb  && chisel 的使用

    Breakpoints BreakPoint分类 breakpoint也是有分类的.我这里的文章内大致按使用的方式分为了 Normal Breakpoint,Exception Breakpoint, ...

  9. [转] 与调试器共舞 - LLDB 的华尔兹

    你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNu ...

随机推荐

  1. 今天无意中发现的WWW.threadPriority

    WWW.threadPriority     Description Priority of AssetBundle decompression thread. You can control dec ...

  2. C#开发微信公众化平台

     C#开发微信公众化平台 写在前面 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文.菜单事件响应) 示例Demo下载 后记 最近公司在做微信开发,其实就是接口开发,网上 ...

  3. C#多线程数据分布加载

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 安装系统重启的时候出现了error:file '/boot/grub/i386-pc/normal.mod' not found

    1.直接进入系统的时候只出现grub rescue的命令行 可以使用的命令有set和 ls 在用ls命令查看 磁盘的分区情况其中hd0 代表第一块硬盘 hd1代表第二块 使用ls 来查看存在那些系统, ...

  5. 初识STM32标准库

    1.CMSIS 标准及库层次关系 CMSIS 标准中最主要的为 CMSIS 核心层,它包括了: STM32标准库可以从官网获得: 在使用库开发时,我们需要把 libraries 目录下的库函数文件添加 ...

  6. MyEclipse中Web项目文件名上红色和黄色感叹号处理

      MyEclipse中Web项目文件名上红色和黄色感叹号处理     先说红色感叹号: 那就是代表错误,说明你引用的JAR包位置无效,所以,你应该重新将包导入到工程里面去,这个具体应该会吧,如果是初 ...

  7. Google Tango初学者教程

    Getting Started with the Tango Java API In this tutorial, we'll go through setting up your build env ...

  8. (轉載)sql server xml字段的操作

    原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 另外可參考:https://msdn.microsoft.com/en-us/li ...

  9. Js复制链接代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. EAS_AOP分布式事务

    在System.Transactions事务体系中,为事务提供了7种不同的隔离级别.这7中隔离级别分别通过 System.Transactions.IsolationLevel的7个枚举项表示. pu ...