59_iOS干货33_Xcode中的lldb常用命令

一,LLDB:

  • lldb(LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件。)

二,lldb常用命令:

  • 1,p(print的简写):打印的结果显示很全
    • 打印基本数据,打印类型和值
    • 打印对象,则显示对象的指针地址和值
    •  $0 、 $1的字样。我们可以将它看作是lldb内部的变量,我们可以在后面的查询中直接使用这些值
      
      (lldb) p str
      (__NSCFConstantString *) $1 = 0x000000010c14e068 @"我是一个普通的字符串"
      (lldb) p intDemo
      (NSInteger) $2 = 2
      (lldb) p $1
      (__NSCFConstantString *) $1 = 0x000000010c14e068 @"我是一个普通的字符串"
  • 2,po(print object的简写):
    • 打印对象
    • 基础数据类型,还可以指定格式打印,如用16进制的格式打印
    • //打印对象
      (lldb)  po str
      我是一个普通的字符串
      
      //打印基本数据类型
      (lldb) p/x intDemo
      (NSInteger) $14 = 0x0000000000000002
  • 3,call命令:
    • 调用方法,p和po命令也有此功能
    • 可以使用在没有返回值,不需要显示输出的情况下,如设置view颜色
    • (lldb) call [self.view setBackgroundColor:[UIColor redColor]]
  • 4,e命令:
    • expression表达式(expr)
    • 例如,直接修改模型中的属性
      • //注意:表达式之后不需要加分号,加了分号之后会报错
         e vc.bankCardModel.cardType = @“3”
        
        (lldb) expr self.productId = @"A0000001076"
        (__NSCFString *) $0 = 0x00007ffc78a8f300 @"A0000001076"
        
        (lldb) expr self.currentSkuId = @"sku10210013"
        (__NSCFString *) $1 = 0x00007ffc790610c0 @"sku10210013"
  • 5,image lookup --address命令:
    • 定位异常代码位置
    • 首先查看崩溃信息
    • 再输入地址命令
      • 输入:
        (lldb) image lookup --address 0x00000001097c396f
        
        输出:
        Address: GomeEShop[0x00000001006af96f] (GomeEShop.__TEXT.__text + 7000239)
        Summary: GomeEShop`-[GMFPTGoodsDetailVC initNecessaryViews] + 3903 at GMFPTGoodsDetailVC.m:589
        
  • 6,image lookup --type查看类型
    • //输入:
      (lldb) image lookup --type UIImage
      
      //输出:
      Best match found in /Users/zhangbeibei/Library/Developer/Xcode/DerivedData/GomeEShop-dhpyydtykrwzvpawiualtxfthsqy/Build/Products/Debug-iphonesimulator/GomeEShop.app/GomeEShop:
      id = {0x00cabeb2}, name = "UIImage", byte-size = 8, decl = UIImage.h:53, compiler_type = "@interface UIImage : NSObject
      @property ( readonly,getter = size,setter = <null selector>,nonatomic ) CGSize size;
      @property ( readonly,getter = CGImage,setter = <null selector>,nonatomic ) CGImageRef CGImage;
      @property ( readonly,getter = CIImage,setter = <null selector>,nonatomic ) CIImage * CIImage;
      @property ( readonly,getter = imageOrientation,setter = <null selector>,nonatomic ) UIImageOrientation imageOrientation;
      @property ( readonly,getter = scale,setter = <null selector>,nonatomic ) CGFloat scale;
      @property ( readonly,getter = images,setter = <null selector>,nonatomic ) NSArray * images;
      @property ( readonly,getter = duration,setter = <null selector>,nonatomic ) NSTimeInterval duration;
      @property ( readonly,getter = capInsets,setter = <null selector>,nonatomic ) UIEdgeInsets capInsets;
      @property ( readonly,getter = resizingMode,setter = <null selector>,nonatomic ) UIImageResizingMode resizingMode;
      @property ( readonly,getter = alignmentRectInsets,setter = <null selector>,nonatomic ) UIEdgeInsets alignmentRectInsets;
      @property ( readonly,getter = renderingMode,setter = <null selector>,nonatomic ) UIImageRenderingMode renderingMode;
      @property ( readonly,getter = traitCollection,setter = <null selector>,copy,nonatomic ) UITraitCollection * traitCollection;
      @property ( readonly,getter = imageAsset,setter = <null selector>,nonatomic ) UIImageAsset * imageAsset;
      @property ( readonly,getter = flipsForRightToLeftLayoutDirection,setter = <null selector>,nonatomic ) BOOL flipsForRightToLeftLayoutDirection;
      @end"
      
      
  • 7,bt(backTrace的简写):
    • 打印当前堆栈信息;
  • 8,bt all
    • 打印所有堆栈信息
  • 9,help:
    • 帮助,里边有各种命令,以及相应的简写
    • help 命令名称,可以显示相关介绍

三,调试的基本方法:

  • 1,打断点
  • 2,lldb命令
  • 3,打印输出
  • 4,chisel工具

猜你喜欢

转载自blog.csdn.net/a_horse/article/details/82835360