iOS之LLDB常用命令

作者: Crazy2015 | 来源:发表于2019-06-07 18:07 被阅读0次
    打印值、修改值、调用方法
    • p、po 打印值
      po:输出值
      p:输出值+值类型+引用名+内存地址(xcode中有内存地址,其它平台不确定)
    (lldb) p width
    (CGFloat) $10 = 70
    (lldb) po width
    70
    (lldb) p endTime
    (__NSCFString *) $14 = 0x0000608000437660 @"08-11 11:43"
    (lldb) po endTime
    08-11 11:43
    

    除此之外,p还隐藏了一个有意思的功能,常量的进制转换:

    //默认打印为10进制
    (lldb) p 100
    (int) $8 = 100
    //转16进制
    (lldb) p/x 100
    (int) $9 = 0x00000064
    //转8进制
    (lldb) p/o 100
    (int) $10 = 0144
    //转二进制
    (lldb) p/t 100
    (int) $2 = 0b00000000000000000000000001100100
    //字符转10进制数字
    (lldb) p/d 'A'
    (char) $7 = 65
    //10进制数字转字符
    (lldb) p/c 66
    (int) $10 = B\0\0\0
    
    • expression 修改参数值
      感觉exp命令是调试过程中最有价值有命令了,它可以打印值、修改值。
    //expression打印值
    (lldb) expression width
    (CGFloat) $5 = 67
    //expression修改值
    (lldb) expression width = 80
    (CGFloat) $6 = 80
    //打印修改后结果
    (lldb) p width
    (CGFloat) $7 = 80
    (lldb)
    
    • call 方法调用
      在断点调用某个方法,并输出此方法的返回值。
    (lldb) call width
    (CGFloat) $12 = 70
    (lldb) call endTime
    (__NSCFString *) $16 = 0x0000608000437660 @"08-11 11:43"
    
    Thread
    • 堆栈打印 thread backtrace
    如果嫌堆栈打印太长,可以加一个值限制,如bt 10,只打印
    (lldb) bt 10
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
      * frame #0: 0x00000001005e4906 DiDi`-[FW_HomeCell_HotBill setDataSource:](self=0x00007fd3938a7800, _cmd="setDataSource:", dataSource=0x00006080001c8bb0) at FW_HomeCell.m:357
        frame #1: 0x00000001009a9fd7 DiDi`-[FW_MyHomeTableView tableView:cellForRowAtIndexPath:](self=0x00007fd3921fec00, _cmd="tableView:cellForRowAtIndexPath:", tableView=0x00007fd3921fec00, indexPath=0xc000000000000316) at FW_MyHomeTableView.m:247
        frame #2: 0x00000001055a2ab2 UIKit`-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 750
        frame #3: 0x00000001055a2cf8 UIKit`-[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
        frame #4: 0x0000000105577639 UIKit`-[UITableView _updateVisibleCellsNow:isRecursive:] + 2845
        frame #5: 0x00000001055abccc UIKit`-[UITableView _performWithCachedTraitCollection:] + 111
        frame #6: 0x0000000105592e7a UIKit`-[UITableView layoutSubviews] + 233
        frame #7: 0x00000001054f955b UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1268
        frame #8: 0x0000000105114904 QuartzCore`-[CALayer layoutSublayers] + 146
        frame #9: 0x0000000105108526 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 370
    
    • thread return 跳出当前方法的执行
      Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该thread return上场了。
      有返回值的方法里,如:numberOfSectionsInTableView:,直接thread return 10,就可以直接跳过方法执行,返回10.

    • 流程控制
      实际上使用xcode自带的可视化工具来控制“继续”“暂停”“下一步”“进入”“跳出”更简单

    继续:continue, c
    下一步:next, n
    进入:step, s
    跳出:finish, f
    

    结语:

    堆栈相关:bt查看堆栈、frame select跳帧、frame variable查看帧参数、thread return跳出当前执行、【step/finish/next/continue】进入/跳出/下一步/跳出本断点

    断点相关:breakpoint set -f -l -c条件断点、breakpoint set -n方法断点、breakpoint delete断点移除、breakpoint list断点列表

    image命令:image lookup -address崩溃定位、image lookup -name方法来源、 image lookup –type 查看成员

    链接:https://www.jianshu.com/p/7fb43e0b956a

    相关文章

      网友评论

        本文标题:iOS之LLDB常用命令

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