美文网首页iOS Developer
iOS调试-LLDB的使用

iOS调试-LLDB的使用

作者: iOS开发到汽修 | 来源:发表于2017-03-23 11:55 被阅读110次

    写在前言
    昨天请教一个同为iOS开发的朋友关于拦截WKWebview长按事件的事,可惜并没有解决,但却让我接触到了LLDB的使用,瞬间感觉一年多的iOS开发白做了。。。刚好最近刚把写文章的习惯养成,故把lldb一些信息记录下来。<p>----摘自各种文章

    快捷键

    先记忆一下一小部分快捷键,毕竟老是用鼠标点来点去的容易抽筋。。。

    | 快捷键功能 | 命令 |
    | -------------- |: --------- :|
    | 暂停/继续 | cmd+c |
    | 控制台显示/隐藏 | cmd+y |
    | 光标切换到控制台 | cmd+shift+c |
    | 清空控制台 | cmd+k |
    | step over | F6 |
    | step into | F7 |
    | step out | F8 |

    HELP

    如果不知道命令的含义,可以在控制台输入help来查看具体命令含义与参数。


    8E5E26BB-EB01-4F48-AB59-371C69BF60CF.png

    print

    最简单的命令, 例如:print self.view或p.self.view

    其中的$1其实是指向这个打印结果的,任何以美元符开头的东西都是存在于 LLDB 的命名空间的,它们是为了帮助你进行调试而存在的,如下图


    38719C79-6B61-44FB-9061-AC474DF6FD5F.png

    expression

    如果想改变程序中的一个值,使用expression:

    DA5C7339-615B-45C1-9510-B5B6A7153108.png

    流程控制

    Image_2014-11-22_at_10.37.45_AM.png

    从左到右,四个按钮分别是:continue,step over,step into,step out。

    第一个,continue按钮,会取消程序的暂停,允许程序正常执行,要么一直执行下去,要么到达下一个断点。在LLDB中,我们可以用process continue命令来达到同样的效果,它的别名是continue,也可以缩写为c。<p>
    第二个,step over 按钮,会以黑盒的方式执行一行代码。如果所在这行代码是一个函数调用,那么就不会跳进这个函数,而是执行这个函数,然后继续。LLDB则可以使用thread step-over,next,或者n命令。<p>
    如果确实想跳进一个函数调用来调试或者检查程序的执行情况,那就用第三个按钮,stepin,或者在LLDB中使用thread step in,step,或者s命令。注意,当前行不是函数调用时,nextstep效果是一样的。<p>
    大多数人知道 cns,但是其实还有第四个按钮,step out。如果你曾经不小心跳进一个函数,但实际上你想跳过它,常见的反应是重复的运行 n 直到函数返回。其实这种情况,step out 按钮是你的救世主。它会继续执行到下一个返回语句 (直到一个堆栈帧结束) 然后再次停止。

    Thread Return

    调试时,还有一个很棒的函数可以用来控制程序流程:thread return 。它有一个可选参数,在执行时它会把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧。这意味这函数剩余的部分不会被执行。这会给 ARC 的引用计数造成一些问题,或者会使函数内的清理部分失效。但是在函数的开头执行这个命令,是个非常好的隔离这个函数,伪造返回值的方式 。

    结束

    先写这么多,主要是摘抄的,目的是自己做一个记录,这是原文地址:与调试器共舞 - LLDB 的华尔兹

    相关文章

      网友评论

        本文标题:iOS调试-LLDB的使用

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