美文网首页
LLDB调试一些常用命令和技巧

LLDB调试一些常用命令和技巧

作者: Trigger_o | 来源:发表于2018-01-05 11:34 被阅读0次

    1.常用命令

    help是帮助命令,会打印出一个command list,help + <command名称>可以查看某一个命令的描述

    LLDB有前缀识别,如next输入n就行了,print输入p,expression输入e就可以.生成的$4是暂存在lldb的变量名.

    p打印变量

    po打印变量的description

    p/x 1000打印1000的16进制(十进制d,二进制t同理)

    e int $a =2定义变量

    e $a = 3修改变量(也可以修改断点时的代码中的变量)

    修改变量的值

    流程控制

    c(continue) 取消断点的暂停 一直到下一个断点,对应第一个按钮

    n(next) 向下执行一行代码,如果是函数则黑盒执行,不会进入函数

    s(step) 进入函数内部,如果下一行不是函数,那么n和s是一样的

    finish  跳出函数

    thread return (+返回值) 可以主动给函数返回值并立即跳出函数,返回值会在程序中起效 (例thread return NO  thread return 110)

    Xcode的lldb流程控制

    frame info 打印当前的代码函数,文件等等信息

    一个例子

    //打印出keyWindow的信息

    (lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
    <UIWindow: 0x7f82b1fa8140; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7f82b1fa92d0>; layer = <UIWindowLayer: 0x7f82b1fa8400>>
       | <UIView: 0x7f82b1d01fd0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7f82b1e2e0a0>>

    //把window的view保存在lldb中

    (lldb) eid$myView = (id)0x7f82b1d01fd0

    //修改背景颜色

    (lldb) e (void)[$myView setBackgroundColor:[UIColorblueColor]]

    //但是只有程序继续运行之后才会看到界面的变化。因为改变的内容必须被发送到渲染服务中,然后显示才会被更新。渲染服务实际上是一个另外的进程 (被称作backboardd)这时执行[CATransaction flush]方法开启渲染

    (lldb) e (void)[CATransaction flush]

    //获取导航控制器

    (lldb) eid$nvc = [[[UIApplicationsharedApplication] keyWindow] rootViewController]

    //可以创建一个新的vc

    (lldb) e id$vc = [UIViewController new]

    //push出来

    (lldb) e (void)[$nvc pushViewContoller:$vc animated:YES]

    //渲染

    (lldb) e (void)[CATransaction flush]

    相关文章

      网友评论

          本文标题:LLDB调试一些常用命令和技巧

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