美文网首页
[iOS-基础-BBC]LLDB调试

[iOS-基础-BBC]LLDB调试

作者: 走进科学 | 来源:发表于2017-09-30 11:02 被阅读8次

    0. 为什么写LLDB的文章

    • 我看的有的同事在开发的时候:临时想看一个变量的值,就在对应代码行写上一个Log >> 编译 >> 运行 >> 到指定页面 >> 观察控制台.看到这里请反省一下自己是否现在还在用这种令人窒息的操作?如果是,那么这篇文章对你很重要请务必认真阅读;

    1.LLDB简介

    *LLDBXCode5之后自带的debugger.
    *LLDB的homepageLLDB,有兴趣可以去自行了解.

    • 其实你在之前就已经接触并使用到了LLDB,如下图中所示堆栈区var展示区控制台、和toolbar均为LLDB的操作区域.其中除了控制台以外其余的3个区域为XCodeLLDB可视化展示.(即其余3个区域的功能都在控制台中得到实现)

    2. LLDB指令

    • Xcode进入断点Crash时都会进入LLDB,此处的LLDB及表示已经进入LLDB并可输入LLDB指令.

    2.1 help指令

    • 直接输入help指令会打印出所有的LLDB指令
    image.png
    • 输入help <command-name> 会打印特定指令的相关说明
    image.png

    2.2 print、printobject 、call指令

    2.2.1 print指令

    • print指令(可简写为p)为打印基本信息打印基本类型的值,或者打印对象的类型和指针.
    image.png

    2.2.2 printobject指令

    • printobject(可简写为po)为打印对象信息的指令,即调用对象的 description方法,和NSLog作用相同
    image.png

    2.2.3 call指令

    • call指令可以执行一行代码但不会处理其返回值:如下图所示redViewbackgroundColor设置错误了,我们可以通过call指令修改过来
    • 总结:三种指令均可执行指令附带的代码,尽在返回结果上的处理不同.p指令打印返回值的基本信息,po指令打印返回值的description,call指令不打印返回值.绝大多数情况下用po指令即可.

    2.3 thred指令

    • 如图所示代码将断点打在37行
    image.png
    • 控制台结果如下,左侧的var展示区则显示了当前作用域的变量

      image.png
    • 此时如果我想获取p_do1中的变量值改怎么做?

      • 输入指令thread backtrace 获取堆栈信息:当前栈为frame #0, p_do1栈为frame #1;
    image.png
    • 输入 frame select 1指令进入p_do1的栈内,左侧变显示其作用域内的变量信息.
      image.png

    2.4 return指令

    • Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该thread return上场了。
      thread return可以接受一个表达式,调用命令之后直接从当前的frame返回表达式的值。

    • 如下图此代码在控制台的打印结果应该是25963

      image.png
    • 但是在断点处输入thread return 1024打印结果结变为1024

    image.png

    3. 最后LLDB还有更多强大的功能,但是由于个人能力和时间有限,仅能讲到这里.有兴趣的小伙伴可以深入研究并分享.谢谢!

    相关文章

      网友评论

          本文标题:[iOS-基础-BBC]LLDB调试

          本文链接:https://www.haomeiwen.com/subject/nckgextx.html