iOS常用调试方法:LLDB命令( 二 )


同样常用的expression简写命令还有po和call 。其中po表示print object,用来打印对象,call用来调用某个方法 。示例如下:

iOS常用调试方法:LLDB命令

文章插图
 
  1. (lldb) expression -- self.view 
  2. (UIView *) $4 = 0x00007f8ca8401690 
  3.  
  4. (lldb) e self.view 
  5. (UIView *) $5 = 0x00007f8ca8401690 
  6.  
  7. (lldb) p self.view 
  8. (UIView *) $6 = 0x00007f8ca8401690 
  9.  
  10. (lldb) po self.view 
  11. <UIView: 0x7f8ca8401690; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x6000008a1dc0>> 
  12.  
  13. (lldb) call self.view 
  14. (UIView *) $8 = 0x00007f8ca8401690 
另外,开发者可以按照print/的语法为print命令指定打印格式:
  1. p/x  //!< 以十六进制打印整数 
  2. p/d  //!< 以带符号的十进制打印整数 
  3. p/u  //!< 以无符号的十进制打印整数 
  4. p/o  //!< 以八进制打印整数 
  5. p/t  //!< 以二进制打印整数 
  6. p/a  //!< 以十六进制打印地址 
  7. p/c  //!< 打印字符常量 
  8. p/f  //!< 打印浮点数 
  9. p/s  //!< 打印字符串 
  10. p/r  //!< 格式化打印 
p/x //!< 以十六进制打印整数p/d //!< 以带符号的十进制打印整数p/u //!< 以无符号的十进制打印整数p/o //!< 以八进制打印整数p/t //!< 以二进制打印整数p/a //!< 以十六进制打印地址p/c //!< 打印字符常量p/f //!< 打印浮点数p/s //!< 打印字符串p/r //!< 格式化打印
示例如下:
iOS常用调试方法:LLDB命令

文章插图
  1. (lldb) p count 
  2. (NSUInteger) $0 = 10 
  3. (lldb) p/t count 
  4. (NSUInteger) $1 = 0b0000000000000000000000000000000000000000000000000000000000001010 
  5. (lldb) p/o count 
  6. (NSUInteger) $2 = 012 
  7. (lldb) p/x count 
  8. (NSUInteger) $3 = 0x000000000000000a 
  9. (lldb) p/x string 
  10. (__NSCFConstantString *) $4 = 0x000000010416a0b8 @"QiShare" 
  11. (lldb) p/c string 
  12. (__NSCFConstantString *) $5 = xb8xa0x16x04x01 @"QiShare" 
  13. (lldb) p/s string 
  14. (__NSCFConstantString *) $6 = @"QiShare" 
  15. (lldb) p/a string 
  16. (__NSCFConstantString *) $7 = 0x000000010416a0b8 @"QiShare" @"QiShare" 
5. 线程
thread是线程相关的命令,语法为thread [],它可以接受不同的可选参数,以实现丰富的功能 。其中thread list、thread backtrace和thread return较为常用 。
开发者可以使用thread list命令查看当前的所有线程,示例如下:
  1. (lldb) thread list 
  2. Process 4031 stopped 
  3. * thread #1: tid = 0x25cac, 0x0000000104167e23 QiDebugDemo`-[QiConsoleViewController testLLDBCommands](self=0x00007f850df0bbf0, _cmd="testLLDBCommands") at QiConsoleViewController.m:34, queue = 'com.apple.main-thread', stop reason = breakpoint 4.1 
  4.   thread #2: tid = 0x25d2f, 0x00000001079ff28a libsystem_kernel.dylib`__workq_kernreturn + 10 
  5.   thread #3: tid = 0x25d30, 0x00000001079ff28a libsystem_kernel.dylib`__workq_kernreturn + 10 
  6.   thread #4: tid = 0x25d31, 0x00000001079ff28a libsystem_kernel.dylib`__workq_kernreturn + 10 
  7.   thread #5: tid = 0x25d32, 0x00000001079ff28a libsystem_kernel.dylib`__workq_kernreturn + 10 
  8.   thread #6: tid = 0x25d33, 0x00000001079ff28a libsystem_kernel.dylib`__workq_kernreturn + 10 
  9.   thread #7: tid = 0x25d3e, 0x00000001079f520a libsystem_kernel.dylib`mach_msg_trap + 10, name = 'com.apple.uikit.eventfetch-thread' 


    推荐阅读