LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件。
 
常用调试命令:
 
1、print命令
 
print命令的简化方式有prin pri p,唯独pr不能用来作为检查,因为会和process混淆,幸运的是p被lldb实现为特指print。
实际上你会发现,lldb对于命令的简称,是头部匹配方式,只要不混淆,你可以随意简称某个命令。
例如: (lldb) p i
       (int) $3 = 0
   返回的$3是命令结果的引用名,使用$3可以进行print $3 + 7这样打印出7,当然,$3可以被用于任何其他表达式或者接收参数的命令。
 
 
2、expression命令
     expression命令可以用来修改变量的值,当然大部分情况下,使用xcode提供的可视化编辑器更方便。
     (lldb) e i = 100
     (int) $4 = 100
 
       实际上print相当于expression --,而--的意思是命令的参数终止,跟在--后面的都是命令的输入数据
       要打印一个对象,则需要使用e -O -- anObj,而e -O -- 的缩写正是我们常用的po命令:
 
 
 3、流程控制命令
 
继续:process continue, continue, c
下一步:thread step-over, next, n
进入:thread step-in, step, s
跳出:thread step-out, finish, f
 
 
 
4、断点命令
 
条件断点、条件执行、记录日志、自动继续、重复断点跳过。
 
 
 
5、在debugger中执行任意代码
(lldb) e char *$str = (char *)malloc(128)
(lldb) e (void)strcpy($str, "wxrld of warcraft")
(lldb) e $str[1] = 'o'
(char) $5 = 'o'
(lldb) p $str
(char *) $str = 0x00007fa22a70f1a0 "world of warcraft"
    
 在debugger中可以修改view的颜色、尺寸、甚至创建controller来push。
    
 expr (void)[0x7fde6c484640 setBackgroundColor:[UIColor redColor]] //根据地址0x7fde6c484640改变一个控件的背景色,找到那个控件,多用于约束有问题时,打印一堆地址而不知道是那个控件有约束问题。。。
 
 
 
6、watchpoint
 
watchpoint可以在某个变量被写入/读取时暂停程序运行:实际上可以使用watchpoint来监视任意一段内存的读写。
 
(lldb) watchpoint set variable string_weak_assign
Watchpoint created: Watchpoint 1: addr = 0x103a66428 size = 8 state = enabled type = w
    declare @ '/Users/wangweiliang/Downloads/AssociatedObjects-master/AssociatedObjects/ViewController.m:12'
    watchpoint spec = 'string_weak_assign'
    new value: 0x00007fa22c804890
(lldb) 
 
string_weak_assign值发生变化,就会命中
Watchpoint 1 hit:
old value: 0x00007fa22c804890
new value: 0x0000000000000000   // 很显然被释放了
 
 
(lldb) watchpoint set v -w read _abc4
v是variable的简写,同样的,set可以简写为s,watch可以简写为wa,而-w后面的参数是不可以简写的必须为read、write或者read_write。
 
7、image
 
    NSArray *array = @[@1, @2];
    NSLog(@"item 3: %@", array[2]);
 
抛出异常
 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
(
        0   CoreFoundation                      0x00000001097f6e65 __exceptionPreprocess + 165
              1   libobjc.A.dylib                     0x000000010926fdeb objc_exception_throw + 48
        2   CoreFoundation                      0x00000001096e5534 -[__NSArrayI objectAtIndex:] + 164
3   AssociatedObjects                   0x0000000108d6a5e7 -[ViewController viewDidLoad] + 855
根据地址找到崩溃代码
(lldb) image lookup --address 0x0000000108d6a5e7   
      Address: AssociatedObjects[0x00000001000015e7] (AssociatedObjects.__TEXT.__text + 855)
      Summary: AssociatedObjects`-[ViewController viewDidLoad] + 855 at ViewController.m:36  // 第36行

iOS调试 LLDB的更多相关文章

  1. IOS调试lldb命令常用,po,

    lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面 ...

  2. IOS调试lldb命令常用po

    lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在“(lldb)”提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如 ...

  3. iOS调试-LLDB学习总结

    from:http://www.jianshu.com/p/d6a0a5e39b0e LLDB阐述 LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...

  4. iOS调试

    iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了 ...

  5. iOS 调试心得

    修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...

  6. iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT

    原文地址:iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT作者:流年若离殇 在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人 ...

  7. Xamarin.iOS调试提示需要iOS SDK

    Xamarin.iOS调试提示需要iOS SDK   错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xco ...

  8. 提高Android和iOS调试编译速度

    http://www.cnblogs.com/findumars/p/7841252.html 提高Android和iOS调试编译速度   如果您使用Delphi开发App,就会遇到:Android和 ...

  9. uniapp - 关于ios调试

    [ios调试] 1.一台windows电脑.一根apple数据线(一旦连接以后,apple设备就会自动识别itunes软件,如果没有安装会提示) 2.安装itunes (爱思助手) 3.官方教程:ht ...

随机推荐

  1. 【VB技巧】VB ListView 控件功能使用详解

    来源:http://lcx.cc/?i=494 ListView控件 在工具箱上击鼠标右键,选择快捷菜单的Components(部件)项,在控件列表中选择Microsoft Windows Commo ...

  2. "unresolved external symbol __imp__WSACleanup@0"

    编译时出现这种问题怎么解决:"unresolved external symbol __imp__WSACleanup@0"出现此类问题一般是ws2_32.lib这个lib没有li ...

  3. HTML标签使用特写

    页面定时刷新标签 //页面定时刷新 <meta http-equiv="> Input标记各种特殊用法 <%--禁止鼠标选择内容--%> <input id=& ...

  4. Android Gradle实用技巧——多渠道打包

    友盟有很多不错的功能,例如渠道统计等. 想要做渠道统计,有一个要求就是要在manifest文件中添加各个渠道的配置.只有一两个渠道还好说,但是渠道多了的话,手动修改然后打包简直是噩梦. 幸好现在And ...

  5. Spring Tool Suite中的Tomcat启动状态修改java代码保存立刻生效

  6. The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved

    偶在页面里引入了标签如下:     <%@   taglib   prefix="c"   uri="http://java.sun.com/jstl/core&q ...

  7. HashMap 实现原理(复习)

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...

  8. 在ScrollView中嵌入GridView

    做android程序开发的都知道,不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动事件,导致只显示一到两行数据.那么就换一种思路,首先让子控件的 ...

  9. Python标准库09 当前进程信息 (os包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和 ...

  10. pgdump使用

    pgdump dbname-h hostIp-U user-p port-t schema_name.table_name-s // nodata-f // to output file /opt/P ...